Kubernetes에서 컨테이너 포트와 대상 포트의 차이점은 무엇입니까?

Aug 17 2020

Kubernetes의 컨테이너와 어떻게 container port다른 targetports가요? 서로 바꿔서 사용할 수 있습니까? 그렇다면 그 이유는 무엇입니까?

쿠 버네 티스의 팟 (Pod) 에를 containerPort표시하는 데 사용되는 아래 코드 스 니펫 port을 발견했습니다.

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
        

위의 코드 스 니펫에서 containerPort매개 변수 (마지막 줄)에 5432를 지정했습니다 . 그래서 이것은 어떻게 containerPort다른 targetport가요?

내가 아는 한,이 용어 port는 일반적으로 (Kubernetes) 의 port를 나타냅니다 service. 내가 틀렸다면 정정하십시오.

답변

4 mario Aug 18 2020 at 16:17

한마디로 : targetPortcontainerPort기본적으로 동일한 포트 (모두 그들이 동일한 값을 가질 것으로 예상된다 사용되는 그렇다면)를 참조하지만 그들은 두 개의 서로 다른 맥락에서 사용하고 완전히 다른 목적을 가지고있다.

그들은 모두 두 가지는 Kubernetes 자원의 사양의 일부이기 때문에 / interchangebly 사용 개체 수 없습니다 ServicePod각각. 목적이 있지만 containerPort순수 정보로서 취급 될 수 있고, targetPort에 의해 요구되는 Service세트를 노출한다 Pods.

/ 사양 containerPort의 특정 값 으로 선언 하면이 특정 포트를 노출 하도록 만들 수 없다는 것을 이해하는 것이 중요합니다. 예를 들어 필드에서 nginx 가 default 대신 포트 를 노출 한다고 선언하는 경우 컨테이너에서 nginx 서버를 구성해야합니다. 이 포트에서 수신합니다.PodDeploymentPodcontainerPortPod808080

선언 containerPortPod사양은 선택 사항입니다. 그것 없이도 Service.NET Framework에서 선언 한 정보를 기반으로 요청을 전달할 위치를 알 수 있습니다 targetPort.

정의 targetPort에서 선언 할 필요가 없다는 것을 기억하는 것이 좋습니다 Service. 생략하면 기본적으로 선언 한 값 port( Service자체 의 포트 )이 사용됩니다.

2 ArghyaSadhu Aug 17 2020 at 10:05

포드 사양의 ContainerPort

컨테이너에서 노출 할 포트 목록입니다. 여기에 포트를 노출하면 컨테이너가 사용하는 네트워크 연결에 대한 추가 정보가 시스템에 제공되지만 주로 정보 제공 용입니다. 여기에 포트를 지정하지 않아도 해당 포트가 노출되는 것을 방지하지 않습니다.

서비스 사양의 targetPort

서비스가 대상으로하는 포드에서 액세스 할 포트의 번호 또는 이름입니다. 번호는 1에서 65535 사이 여야합니다. 이름은 IANA_SVC_NAME이어야합니다. 이것이 문자열 인 경우 대상 Pod의 컨테이너 포트에서 이름이 지정된 포트로 조회됩니다. 이것이 지정되지 않으면 'port'필드의 값이 사용됩니다 (ID 맵).

따라서 targetPort서비스 containerPort에서 포드 사양 과 일치해야합니다. 이것이 서비스가 트래픽을 전달할 대상 컨테이너 포트를 알고있는 방법이기 때문입니다.