Redis
 sql >> Base de données >  >> NoSQL >> Redis

Exposer Redis avec Ingress Nginx Controller

Redis fonctionne sur 6379 qui n'est pas un port HTTP (80 443). Vous devez donc activer la prise en charge TCP/UDP dans le contrôleur d'entrée nginx. La documentation minikube ici montre comment le faire pour redis.

Mettre à jour les mappages de configuration des services TCP et/ou UDP

En empruntant le tutoriel sur la configuration des services TCP et UDP avec le contrôleur nginx ingress, nous devrons modifier le configmap qui est installé par défaut lors de l'activation de l'addon minikube ingress.

Il existe 2 configmaps, 1 pour les services TCP et 1 pour les services UDP. Par défaut, ils ressemblent à ceci :

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: udp-services
  namespace: ingress-nginx

Étant donné que ces configmaps sont centralisés et peuvent contenir des configurations, il est préférable de ne les corriger que de les écraser complètement.

Prenons ce déploiement Redis comme exemple :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
  namespace: default
  labels:
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - image: redis
        imagePullPolicy: Always
        name: redis
        ports:
        - containerPort: 6379
          protocol: TCP

Créez un fichier redis-deployment.yaml et collez le contenu ci-dessus. Installez ensuite le déploiement redis avec la commande suivante :

kubectl apply -f redis-deployment.yaml

Ensuite, nous devons créer un service capable d'acheminer le trafic vers nos pods :

apiVersion: v1
kind: Service
metadata:
  name: redis-service
  namespace: default
spec:
  selector:
    app: redis
  type: ClusterIP
  ports:
    - name: tcp-port
      port: 6379
      targetPort: 6379
      protocol: TCP

Créer un fichier redis-service.yaml et collez le contenu ci-dessus. Installez ensuite le service redis avec la commande suivante :

kubectl apply -f redis-service.yaml

Pour ajouter un service TCP au contrôleur d'entrée nginx, vous pouvez exécuter la commande suivante :

kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'

Où :

6379 :le port que votre service doit écouter depuis l'extérieur de la machine virtuelle minikube

default :l'espace de noms dans lequel votre service est installé

redis-service :le nom du service

Nous pouvons vérifier que notre ressource a été patchée avec la commande suivante :

kubectl get configmap tcp-services -n kube-system -o yaml

Nous devrions voir quelque chose comme ceci :

apiVersion: v1
data:
  "6379": default/redis-service:6379
kind: ConfigMap
metadata:
  creationTimestamp: "2019-10-01T16:19:57Z"
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
  name: tcp-services
  namespace: kube-system
  resourceVersion: "2857"
  selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services
  uid: 4f7fac22-e467-11e9-b543-080027057910

La seule valeur que vous devez valider est qu'il existe une valeur sous la propriété data qui ressemble à ceci :

"6379": default/redis-service:6379

Corriger le contrôleur ingress-nginx

Il reste une dernière étape à effectuer pour obtenir la connectivité du cluster extérieur. Nous devons patcher notre contrôleur nginx pour qu'il écoute sur le port 6379 et puisse acheminer le trafic vers votre service. Pour ce faire, nous devons créer un fichier de correctif.

spec:
  template:
    spec:
      containers:
      - name: ingress-nginx-controller
        ports:
         - containerPort: 6379
           hostPort: 6379

Créez un fichier appelé ingress-nginx-controller-patch.yaml et collez le contenu ci-dessus.

Appliquez ensuite les modifications avec la commande suivante :

kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system