Kubernetes에서 컨테이너 포트와 대상 포트의 차이점은 무엇입니까?
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
. 내가 틀렸다면 정정하십시오.
답변
한마디로 : targetPort
와 containerPort
기본적으로 동일한 포트 (모두 그들이 동일한 값을 가질 것으로 예상된다 사용되는 그렇다면)를 참조하지만 그들은 두 개의 서로 다른 맥락에서 사용하고 완전히 다른 목적을 가지고있다.
그들은 모두 두 가지는 Kubernetes 자원의 사양의 일부이기 때문에 / interchangebly 사용 개체 수 없습니다 Service
와 Pod
각각. 목적이 있지만 containerPort
순수 정보로서 취급 될 수 있고, targetPort
에 의해 요구되는 Service
세트를 노출한다 Pods
.
/ 사양 containerPort
의 특정 값 으로 선언 하면이 특정 포트를 노출 하도록 만들 수 없다는 것을 이해하는 것이 중요합니다. 예를 들어 필드에서 nginx 가 default 대신 포트 를 노출 한다고 선언하는 경우 컨테이너에서 nginx 서버를 구성해야합니다. 이 포트에서 수신합니다.Pod
Deployment
Pod
containerPort
Pod
8080
80
선언 containerPort
의 Pod
사양은 선택 사항입니다. 그것 없이도 Service
.NET Framework에서 선언 한 정보를 기반으로 요청을 전달할 위치를 알 수 있습니다 targetPort
.
정의 targetPort
에서 선언 할 필요가 없다는 것을 기억하는 것이 좋습니다 Service
. 생략하면 기본적으로 선언 한 값 port
( Service
자체 의 포트 )이 사용됩니다.
포드 사양의 ContainerPort
컨테이너에서 노출 할 포트 목록입니다. 여기에 포트를 노출하면 컨테이너가 사용하는 네트워크 연결에 대한 추가 정보가 시스템에 제공되지만 주로 정보 제공 용입니다. 여기에 포트를 지정하지 않아도 해당 포트가 노출되는 것을 방지하지 않습니다.
서비스 사양의 targetPort
서비스가 대상으로하는 포드에서 액세스 할 포트의 번호 또는 이름입니다. 번호는 1에서 65535 사이 여야합니다. 이름은 IANA_SVC_NAME이어야합니다. 이것이 문자열 인 경우 대상 Pod의 컨테이너 포트에서 이름이 지정된 포트로 조회됩니다. 이것이 지정되지 않으면 'port'필드의 값이 사용됩니다 (ID 맵).
따라서 targetPort
서비스 containerPort
에서 포드 사양 과 일치해야합니다. 이것이 서비스가 트래픽을 전달할 대상 컨테이너 포트를 알고있는 방법이기 때문입니다.