Diferença entre porta de contêiner e porta de destino no Kubernetes?

Aug 17 2020

Qual é a container portdiferença targetportsem um contêiner no Kubernetes? Eles são usados ​​de forma intercambiável, se sim, por quê?

Encontrei o trecho de código abaixo, onde containerPorté usado para denotar o portem um pod no 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
        

No trecho de código acima, eles deram 5432 para o containerPortparâmetro (na última linha). Então, como isso é containerPortdiferente targetport?

Pelo que eu sei, o termo portem geral se refere ao portno service(Kubernetes). Corrija-me se estiver incorreto.

Respostas

4 mario Aug 18 2020 at 16:17

Resumindo: targetPort e containerPortbasicamente referem-se à mesma porta (portanto, se ambas forem usadas, espera-se que tenham o mesmo valor), mas são usadas em dois contextos diferentes e têm finalidades totalmente diferentes.

Eles não podem ser usados ​​de forma intercambiável, pois ambos são partes da especificação de dois recursos / objetos kubernetes distintos: Servicee Podrespectivamente. Embora o objetivo de containerPortpossa ser tratado como puramente informativo, targetPorté exigido pelo Serviceque expõe um conjunto de Pods.

É importante entender que ao declarar containerPortcom o valor específico em sua especificação Pod/ Deploymentvocê não pode fazer Podcom que exponha esta porta específica, por exemplo, se você declarar no containerPortcampo que seu nginx Podexpõe a porta em 8080vez do padrão 80, você ainda precisa configurar seu servidor nginx em seu contêiner para ouvir nesta porta.

A declaração containerPortna Podespecificação é opcional. Mesmo sem ele você Servicesaberá para onde direcionar a solicitação com base nas informações declaradas em seu targetPort.

É bom lembrar que não é obrigatório declarar targetPortna Servicedefinição. Se você omiti-lo, o padrão é o valor declarado port(que é a porta do Servicepróprio).

2 ArghyaSadhu Aug 17 2020 at 10:05

ContainerPort nas especificações do pod

Lista de portas a serem expostas do contêiner. Expor uma porta aqui fornece ao sistema informações adicionais sobre as conexões de rede que um contêiner usa, mas é principalmente informativo. Não especificar uma porta aqui NÃO impede que essa porta seja exposta

targetPort nas especificações de serviço

Número ou nome da porta a ser acessada nos pods direcionados pelo serviço. O número deve estar no intervalo de 1 a 65535. O nome deve ser IANA_SVC_NAME. Se for uma string, ela será pesquisada como uma porta nomeada nas portas do contêiner do Pod de destino. Se isso não for especificado, o valor do campo 'porta' é usado (um mapa de identidade).

Portanto, o targetPortin service precisa corresponder às containerPortespecificações do pod, porque é assim que o serviço sabe para qual porta de contêiner é o destino para encaminhar o tráfego.