Kubernetes의 Service 리소스에서 port, targetPort, nodePort는 서비스가 요청을 받아서 파드로 전달하는 과정을 제어하는 주요 필드입니다. 각 필드는 다른 네트워크 계층에서의 포트 역할을 의미합니다.
1. port
- 역할: 클러스터 내부에서 Service가 사용할 포트입니다.
- 위치: 클러스터의 가상 IP(ClusterIP)에서 바인딩됩니다.
- 설명:
- 서비스가 트래픽을 받는 포트로, 클러스터 내의 다른 파드가 이 서비스에 접근할 때 사용하는 포트입니다.
- 예를 들어, Service의 ClusterIP가 10.0.0.5이고 port가 80이라면, 10.0.0.5:80을 통해 서비스에 요청을 보낼 수 있습니다.
2. targetPort
- 역할: Service가 연결할 파드 내 컨테이너의 포트입니다.
- 위치: Service가 요청을 받아 전달할 때 사용하는 포트로, 파드의 컨테이너가 실제로 요청을 수신하는 포트입니다.
- 설명:
- targetPort는 보통 컨테이너 내에서 서비스가 실행 중인 포트 번호를 나타냅니다. 이를 통해 클러스터 외부 포트와 컨테이너 내부 포트를 다르게 설정할 수 있습니다.
- 예를 들어, port가 80이고 targetPort가 8080이면, Service는 10.0.0.5:80으로 들어온 트래픽을 해당 파드의 8080 포트로 전달합니다.
3. nodePort
- 역할: Service를 클러스터 외부에 노출하는 고정된 포트입니다.
- 위치: 클러스터의 모든 노드에서 할당된 특정 포트 번호로 바인딩됩니다.
- 설명:
- type: NodePort로 설정된 서비스에서 사용됩니다. Kubernetes는 지정된 포트를 클러스터의 모든 노드에서 열어 클러스터 외부 트래픽을 받을 수 있게 합니다.
- 이 경우 클라이언트는 <NodeIP>:<NodePort>로 서비스에 접근할 수 있습니다. NodePort는 보통 30000-32767 범위 내의 값으로 설정됩니다.
- 예를 들어, nodePort가 30080으로 설정되면 클러스터의 모든 노드에서 30080 포트가 열리고, 이 포트를 통해 들어온 요청은 Service의 port로 라우팅됩니다.
예시
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
ports:
- port: 80 # Service가 노출하는 포트
targetPort: 8080 # 파드 내 컨테이너의 포트
nodePort: 30080 # 클러스터 외부에서 접근 가능한 포트
selector:
app: my-app
이 예시에서는:
- 클러스터 내부에서는 10.0.0.5:80을 통해 서비스에 접근할 수 있고,
- 클러스터 외부에서는 <NodeIP>:30080으로 접근할 수 있습니다.
- 요청은 최종적으로 파드의 8080 포트로 전달됩니다.
요약
- port: 클러스터 내 Service 포트
- targetPort: 파드 내 컨테이너 포트
- nodePort: 클러스터 외부에 노출되는 고정 포트
각 포트 필드는 서로 다른 네트워크 계층에서 역할을 하며, 이를 통해 유연한 서비스 구성이 가능합니다.
'DevOps' 카테고리의 다른 글
Kubernetes - Service ( spec.type ) (0) | 2024.10.26 |
---|---|
Kubernetes - Service ( Selector 예시 ) (0) | 2024.10.26 |
CKA 예제 리마인더 - 2. ReplicaController, ReplicaSet (2) | 2024.10.24 |
CKA 예제 리마인더 - 1. Pod (0) | 2024.10.24 |
Kubernetes - kube-proxy (0) | 2024.10.19 |