Différence entre le port de conteneur et le port cible dans Kubernetes?

Aug 17 2020

En quoi est-ce container portdifférent d' targetportsun conteneur dans Kubernetes? Sont-ils utilisés de manière interchangeable, si oui, pourquoi?

Je suis tombé sur l'extrait de code ci-dessous où containerPortest utilisé pour désigner le portsur un pod dans Kubernetes.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
  labels:
    app: demo-voting-app
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgres-pod
      app: demo-voting-app
  template:
    metadata:
      name: postgres-pod
      labels:
        name: postgres-pod
        app: demo-voting-app

    spec:
      containers:
      - name: postgres
        image: postgres:9.4
        ports:
        - containerPort: 5432
        

Dans l'extrait de code ci-dessus, ils ont donné 5432 pour le containerPortparamètre (dans la dernière ligne). Alors, en quoi est-ce containerPortdifférent targetport?

Autant que je sache, le terme porten général fait référence au portsur le service(Kubernetes). Corrigez-moi si je me trompe.

Réponses

4 mario Aug 18 2020 at 16:17

En un mot: targetPort et containerPortse réfèrent essentiellement au même port (donc si les deux sont utilisés, ils devraient avoir la même valeur) mais ils sont utilisés dans deux contextes différents et ont des objectifs entièrement différents.

Ils ne peuvent pas être utilisés de manière interchangeable car les deux font partie de la spécification de deux ressources / objets Kubernetes distincts: Serviceet Podrespectivement. Alors que le but de containerPortpeut être traité comme purement informatif, il targetPortest requis par le Servicequi expose un ensemble de Pods.

Il est important de comprendre qu'en déclarant containerPortavec la valeur spécifique dans votre Pod/ Deploymentspécification, vous ne pouvez pas vous obliger Podà exposer ce port spécifique, par exemple si vous déclarez dans le containerPortchamp que votre nginx Podexpose le port 8080au lieu de celui par défaut 80, vous devez toujours configurer votre serveur nginx dans votre conteneur à écouter sur ce port.

La déclaration containerPortdans la Podspécification est facultative. Même sans elle, vous Servicesaurez où diriger la demande en fonction des informations qu'elle a déclarées dans son fichier targetPort.

Il est bon de se rappeler qu'il n'est pas nécessaire de déclarer targetPortdans la Servicedéfinition. Si vous l'omettez, il prend par défaut la valeur pour portlaquelle vous avez déclaré (qui est le port de Servicelui - même).

2 ArghyaSadhu Aug 17 2020 at 10:05

ContainerPort dans la spécification du pod

Liste des ports à exposer à partir du conteneur. L'exposition d'un port ici donne au système des informations supplémentaires sur les connexions réseau utilisées par un conteneur, mais elles sont principalement informatives. Ne pas spécifier de port ici N'empêche PAS ce port d'être exposé

targetPort dans les spécifications de service

Numéro ou nom du port auquel accéder sur les pods ciblés par le service. Le numéro doit être compris entre 1 et 65535. Le nom doit être un IANA_SVC_NAME. S'il s'agit d'une chaîne, elle sera recherchée en tant que port nommé dans les ports de conteneur du pod cible. Si cela n'est pas spécifié, la valeur du champ 'port' est utilisée (une carte d'identité).

Par conséquent, le targetPortservice doit correspondre à la containerPortspécification du pod car c'est ainsi que le service sait à quel port de conteneur est la destination de transfert du trafic.