Differenza tra porta container e porta di destinazione in Kubernetes?

Aug 17 2020

Qual è la container portdifferenza rispetto targetportsa un contenitore in Kubernetes? Sono usati in modo intercambiabile, in caso affermativo perché?

Mi sono imbattuto nello snippet di codice riportato di seguito dove containerPortviene utilizzato per denotare portsu un pod in 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
        

Nello snippet di codice sopra, hanno fornito 5432 per il containerPortparametro (nell'ultima riga). Allora, come è containerPortdiverso da targetport?

Per quanto ne so, il termine port, in generale, si riferisce al portsul service(kubernetes). Correggimi se sbaglio.

Risposte

4 mario Aug 18 2020 at 16:17

In poche parole: targetPort e containerPortfondamentalmente si riferiscono alla stessa porta (quindi se vengono utilizzate entrambe ci si aspetta che abbiano lo stesso valore) ma sono utilizzate in due contesti diversi e hanno scopi completamente diversi.

Non possono essere utilizzati in modo intercambiabile poiché entrambi fanno parte della specifica di due risorse / oggetti kubernetes distinti: Servicee Podrispettivamente. Mentre lo scopo di containerPortpuò essere trattato come puramente informativo, targetPortè richiesto dal Servicequale espone un insieme di Pods.

È importante capire che dichiarando containerPortcon il valore specifico nella tua Pod/ Deploymentspecifica non puoi fare Podin modo di esporre questa porta specifica, ad esempio se dichiari nel containerPortcampo che il tuo nginx Podespone la porta 8080invece di quella predefinita 80, devi comunque configurare il tuo server nginx nel tuo contenitore per ascoltare su questa porta.

La dichiarazione containerPortnelle Podspecifiche è facoltativa. Anche senza di essa Servicesaprai dove indirizzare la richiesta in base alle informazioni che ha dichiarato nel suo targetPort.

È bene ricordare che non è necessario dichiarare targetPortnella Servicedefinizione. Se lo ometti, il valore predefinito è il valore dichiarato port(che è la porta di Servicese stesso).

2 ArghyaSadhu Aug 17 2020 at 10:05

ContainerPort nelle specifiche del pod

Elenco delle porte da esporre dal container. L'esposizione di una porta qui fornisce al sistema informazioni aggiuntive sulle connessioni di rete utilizzate da un contenitore, ma è principalmente informativo. La mancata specifica di una porta qui NON impedisce che la porta venga esposta

targetPort nelle specifiche del servizio

Numero o nome della porta a cui accedere sui pod targetizzati dal servizio. Il numero deve essere compreso tra 1 e 65535. Il nome deve essere IANA_SVC_NAME. Se questa è una stringa, verrà cercata come una porta denominata nelle porte del contenitore del pod di destinazione. Se non viene specificato, viene utilizzato il valore del campo "porta" (una mappa di identità).

Quindi targetPortin service deve corrispondere alle containerPortspecifiche in pod perché è così che il servizio sa quale porta del container è la destinazione a cui inoltrare il traffico.