web-dev-qa-db-fra.com

Comment exposer plusieurs ports à l'aide d'un service d'équilibrage de charge dans Kubernetes

J'ai créé un cluster à l'aide de la plateforme Google Cloud (moteur de conteneur) et déployé un pod à l'aide du fichier yaml suivant:

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: deployment-name
spec:
  replicas: 1
  template:
    metadata:
      name: pod-name
      labels: 
        app: app-label
    spec:
      containers: 
      - name: container-name
      image: gcr.io/project-id/image-name
      resources:
        requests:
          cpu: 1
      ports:
      - name: port80
        containerPort: 80
      - name: port443
        containerPort: 443
      - name: port6001
        containerPort: 6001

Ensuite, je veux créer un service qui permet au pod d'écouter sur tous ces ports. Je sais qu'il suit le fichier yaml pour créer un service qui écoute sur un port:

apiVersion: v1
kind: Service
metadata: 
  name: service-name
spec:    
  ports:
  - port: 80
    targetPort: 80
  selector: 
    app: app-label
  type: LoadBalancer

Cependant, lorsque je veux que le pod écoute sur plusieurs ports comme celui-ci, cela ne fonctionne pas:

apiVersion: v1
kind: Service
metadata: 
  name: service-name
spec:    
  ports:
  - port: 80
    targetPort: 80
  - port: 443
    targetPort: 443
  - port: 6001
    targetPort: 6001
  selector: 
    app: app-label
  type: LoadBalancer

Comment puis-je faire écouter mon pod à plusieurs ports?

11
Sebastien

Vous avez deux options:

  1. Vous pouvez avoir plusieurs services, un pour chaque port. Comme vous l'avez souligné, chaque service se retrouvera avec une adresse IP différente
  2. Vous pourriez avoir un seul service avec plusieurs ports. Dans ce cas particulier, vous devez donner un nom à tous les ports.

Dans votre cas, le service devient:

apiVersion: v1
kind: Service
metadata:
  name: service-name
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  - name: something
    port: 6001
    targetPort: 6001
  selector:
    app: app-label
  type: LoadBalancer

Cela est nécessaire pour que les points d'extrémité puissent être désambiguïsés.

16
danielepolencic