반응형
Kubernetes service의 manifest를 작성하다보면, port와 targetport가 헷갈린다.
각 term이 의미하는 것을 지금 이해해도, 몇 개월 뒤에 다시 service resource에 대한 manifest를 작성하려고 보면 또 헷갈려서 다시 문서를 뒤적거리게 된다.
- Port
- Service Object 자체의 Port. 즉, 여러 Pod를 묶어서 이 Port 값으로 노출시킨다.
- 한 kubernetes cluster 내에서 다른 pod가 내 pod에게 Layer 4 메시지를 전송할 때 바라보는 port number.
- 만약 MetalLB, NGINX 같은 Ingress Gateway를 사용하는 경우라면, 이 'port' 값이 Cluster 외부에서 LB(즉, Ingress Gateway)를 통해 들어오는 Port number가 된다.
예를 들어, http://{EXTERNAL-IP}:{SERVICE-PORT}
이런 형태가 된다.
- TargetPort
- 내 pod 안에 있는 container가 listening하고 있는 port number.
- container(즉, app)이 어떤 port를 listening하고 있는지 정확한 값을 알고 설정해야 한다. (HTTPD 설정시 기본 값을 이용했다면, 대부분 80이지 않을까?)
- NodePort
- kubernetes 밖으로 노출시킬 port number.
- Ingress Gateway 또는 Istio를 사용하는 경우에는 딱히 설정할 필요없는 설정 항목.
Example
만약 2개의 TCP Port를 Service로 오픈하고 싶다면, 아래와 같이 Service Resource와 Pod Resource를 설정한다.
##
## Service Manifest Example
##
kind: Service
metadata:
... 중간 생략 ...
spec:
ports:
- name: metrics
port: 24231
protocol: TCP
targetPort: metrics
- name: logfile-metrics
port: 2112
protocol: TCP
targetPort: logfile-metrics
... 중간 생략 ...
##
## Pod Manifest Example
##
kind: Pod
metadata:
... 중간 생략 ...
spec:
containers:
name: my-container
ports:
- containerPort: 24231
name: metrics
protocol: TCP
- containerPort: 2112
name: logfile-metrics
protocol: TCP
... 중간 생략 ...
'kubernetes' 카테고리의 다른 글
MetalLB BGP 모드를 이용한 Loadbalaning (0) | 2021.08.30 |
---|---|
Istio Circuit Break (0) | 2021.08.07 |
Dockerfile Example (0) | 2021.07.19 |
Istio Web Docs - 읽기 좋은 순서대리 정리 (0) | 2021.07.19 |
nsenter (0) | 2021.07.13 |