web-dev-qa-db-fra.com

Se connecter à un autre pod à partir d'un pod

Fondamentalement, j'ai un déploiement qui crée 3 conteneurs qui évoluent automatiquement: PHP-FPM, NGINX et le conteneur qui contient l'application, tous configurés avec des secrets, des services et des entrées. L'application partage également le projet entre PHP-FPM et NGINX, donc tout est configuré.

Comme je veux explorer davantage avec K8s, j'ai décidé de créer un pod avec Redis qui monte également un disque persistant (mais ce n'est pas important). J'ai également créé un service pour redis et tout fonctionne parfaitement bien si je SSH dans le conteneur Redis et exécutez redis-cli.

La partie amusante est que le projet ne peut pas se connecter au pod sur lequel Redis est activé. Je comprends que les conteneurs entre les pods partagent le même réseau "local" et qu'ils sont accessibles en utilisant localhost.

Comment connecter mon projet au serveur redis qui s'exécute dans un autre pod, qui évolue indépendamment? Quel est le problème avec le service Redis?


Mon service Redis est le suivant:

apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis

Mon pod Redis est alimenté par un fichier de configuration de déploiement (je ne le fais pas nécessairement évoluer, mais j'attendrai avec impatience):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      volumes:
        - name: redis-persistent-volume
          persistentVolumeClaim:
            claimName: redis-pvc
      containers:
        - image: redis:4.0.11
          command: ['redis-server']
          name: redis
          imagePullPolicy: Always
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi
          ports:
            - containerPort: 6379
              name: redis
          volumeMounts:
            - name: redis-persistent-volume
              mountPath: /data

De plus, lorsque je puise dans le kubectl get service, le serveur Redis a une IP de cluster:

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        21h
nginx-service   NodePort    10.100.111.16   <none>        80:30312/TCP   21h
redis-service   ClusterIP   10.99.80.141    <none>        6379/TCP       6s
10
user9874638

Si vous utilisez MicroK8s , alors consultez leur documentation

J'ai eu du mal à communiquer avec un pod d'un autre, et l'autre chose qui n'a pas fonctionné comme prévu était de communiquer avec les services en utilisant leur nom (la recherche DNS semblait ne pas être en mesure de traduire le nom du service en IP).

Dans tous les cas, il y avait quelques étapes pertinentes dans la documentation MicroK8s que je devais exécuter et puis tout a soudainement commencé à fonctionner.

Assurez-vous également que vous avez réellement installé le service DNS MicroK8s:

microk8s.enable dns

Veuillez vous référer à la documentation MicroK8s pour la dernière version, mais voici les étapes à partir d'aujourd'hui:

enter image description here

0
NS du Toit