Unterschied zwischen Container- und Zielport in Kubernetes?

Aug 17 2020

Wie container portunterscheidet sich targetportsein Container in Kubernetes? Werden sie austauschbar verwendet, wenn ja, warum?

Ich bin auf das folgende Code-Snippet gestoßen containerPort, mit dem das portauf einem Pod in Kubernetes bezeichnet wird.

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
        

Im obigen Code-Snippet haben sie 5432 für den containerPortParameter angegeben (in der letzten Zeile). Wie containerPortunterscheidet sich das von targetport?

Soweit ich weiß, portbezieht sich der Begriff im Allgemeinen portauf die service(Kubernetes). Korrigiere mich, wenn ich falsch liege.

Antworten

4 mario Aug 18 2020 at 16:17

Kurz gesagt: targetPort und containerPortbeziehen sich im Grunde genommen auf denselben Port (wenn also beide verwendet werden, wird erwartet, dass sie denselben Wert haben), aber sie werden in zwei verschiedenen Kontexten verwendet und haben völlig unterschiedliche Zwecke.

Sie können nicht interchangebly verwendet werden , da beide Teile der Spezifikation von zwei verschiedenen Kubernetes Ressourcen / Objekte: Serviceund Podjeweils. Während der Zweck von containerPortals rein informativ behandelt werden kann, targetPortwird von dem verlangt, der Serviceeine Reihe von Pods.

Es ist wichtig zu verstehen, dass Sie durch Deklarieren containerPortmit dem spezifischen Wert in Ihrer Pod/ DeploymentSpezifikation nicht dazu gebracht werden können Pod, diesen bestimmten Port verfügbar zu machen. Wenn Sie beispielsweise im containerPortFeld deklarieren , dass Ihr Nginx den PodPort 8080anstelle des Standards verfügbar macht 80, müssen Sie Ihren Nginx-Server weiterhin in Ihrem Container konfigurieren auf diesen Port zu hören.

Die Angabe containerPortin der PodSpezifikation ist optional. Auch ohne sie Servicewissen Sie, wohin Sie die Anfrage richten müssen, basierend auf den Informationen, die Sie in der Datei angegeben haben targetPort.

Es ist gut daran zu denken, dass es nicht erforderlich ist, targetPortin der ServiceDefinition zu deklarieren . Wenn Sie es weglassen, wird standardmäßig der Wert verwendet, für den Sie deklariert haben port(dies ist der Port von sich Serviceselbst).

2 ArghyaSadhu Aug 17 2020 at 10:05

ContainerPort in Pod-Spezifikation

Liste der Ports, die aus dem Container verfügbar gemacht werden sollen. Wenn Sie hier einen Port verfügbar machen, erhält das System zusätzliche Informationen zu den von einem Container verwendeten Netzwerkverbindungen, ist jedoch in erster Linie informativ. Wenn Sie hier keinen Port angeben, wird NICHT verhindert, dass dieser Port verfügbar gemacht wird

targetPort in der Service-Spezifikation

Nummer oder Name des Ports, auf den auf die Pods zugegriffen werden soll, auf die der Dienst abzielt. Die Nummer muss im Bereich von 1 bis 65535 liegen. Der Name muss ein IANA_SVC_NAME sein. Wenn dies eine Zeichenfolge ist, wird sie in den Container-Ports des Ziel-Pods als benannter Port nachgeschlagen. Wenn dies nicht angegeben ist, wird der Wert des Felds 'port' verwendet (eine Identitätszuordnung).

Daher muss der targetPortDienst mit der containerPortIn-Pod-Spezifikation übereinstimmen, da der Dienst auf diese Weise weiß, an welchen Containerport der Datenverkehr weitergeleitet werden soll.