728x90

Node
- 쿠버네티스 클러스터를 구성하는 서버(머신).
- Pod가 실제로 실행되는 “땅”.
- 멀티노드면 Pod가 노드들에 흩어져 배치될 수 있음.
Pod
- 컨테이너가 실행되는 최소 단위.
- Pod는 재시작/재배치되면 IP가 바뀔 수 있고, 개수도 늘었다 줄었다 함.
Service
- 여러 Pod를 하나의 고정된 주소(가상 IP + DNS) 로 묶어주는 “대표 접속 창구”.
- Service는 selector(라벨)로 Pod를 선택하고, 그 Pod들로 로드밸런싱해줌.
- Pod가 어느 노드에 있든 상관없이 라벨만 맞으면 묶임.
기본 방식: 라벨로 묶기 (가장 흔함)
서비스는 보통 이렇게 “라벨이 같은 Pod들”을 대상으로 잡아.
예를 들어 pod1, pod2, pod5에만 app=hello 라벨이 있고,
pod3, pod4, pod6에는 없으면:
kubectl label pod pod1 pod2 pod5 app=hello
서비스:
apiVersion:v1
kind:Service
metadata:
name:hello-svc
spec:
selector:
app:hello
ports:
-port:8080
targetPort:8080
→ 그러면 hello-svc는 pod1, pod2, pod5만 엔드포인트로 잡아.
확인:
kubectl get endpoints hello-svc
# 또는
kubectl describe svc hello-svc
중요한 제약
- selector는 “pod1, pod2, pod5만 딱 찍어서”가 아니라 라벨 조건으로 선택이야.
- 그래서 “pod1,2,5만” 만들려면 그 3개에만 공통 라벨을 주거나,
- 라벨 조합을 설계해야 함.
포트가 헷갈릴 때 핵심 3가지
1) Pod 포트 (containerPort / targetPort)
- 컨테이너가 실제로 듣는 포트(예: 8080).
- Pod가 많아도 각각 다른 IP라 동일 포트를 여러 Pod가 써도 충돌 없음.
2) Service 포트 (port)
- Service(가상 IP)가 제공하는 포트(예: 8080).
- Service마다 ClusterIP가 달라서 여러 Service가 같은 port(8080)를 써도 OK.
3) NodePort (nodePort, 예: 31000)
- 노드에 실제로 열리는 포트(외부에서 접근 가능한 문).
- 중요: NodePort 하나를 만들면 “특정 노드만”이 아니라 클러스터의 모든 노드에 동일한 포트(31000)가 열림.
- 대신 클러스터 전체에서 nodePort 번호는 유일해야 함(다른 Service가 31000을 또 못 씀).
NodePort 트래픽 흐름 (외부 → Pod)
- 외부에서 노드IP:31000으로 접속
- 모든 노드에서 31000이 열려 있고(kube-proxy가 처리),
- 요청은 해당 Service로 라우팅
- Service가 라벨로 묶인 Pod 중 하나로 전달(로드밸런싱)
- 최종적으로 Pod의 targetPort(예: 8080)로 연결됨
한 줄 요약:
외부 노드IP:31000 → Service:port → Pod:targetPort
728x90
'Kubernetes' 카테고리의 다른 글
| 5.Pod (0) | 2026.02.15 |
|---|---|
| 3.Docker vs containerd vs CRI (0) | 2026.02.11 |
| 2. Kubernetes 기본 개념 (0) | 2026.02.11 |
| 1. 컨테이너와 쿠버네티스 (0) | 2026.02.11 |