Pod IP는 고정되지 않는다
파드는 컨테이너를 실행하기 위한 쿠버네티스의 가장 기본적인 단위입니다. 각 파드는 고유한 Pod IP를 할당받으며, 이 IP를 통해 같은 노드에 있는 파드뿐 아니라 다른 노드에 있는 파드와도 클러스터 내부에서 직접 통신할 수 있습니다. 다만 파드는 장애나 업데이트 시 삭제되고 다시 생성되는 일회성 리소스이므로, 아래와 같은 상황에서 Pod IP가 변경될 수 있습니다.

예를 들어, Pod A가 Pod B의 IP(10.244.2.34)를 통해 문제없이 정상적으로 통신하고 있던 상태라고 가정해보겠습니다.

하지만 이후 Pod B가 장애로 종료된 뒤 재생성되면서 IP가 10.244.3.10으로 변경되면, Pod A가 기존 IP로 ping을 보내더라도 더 이상 Pod B에 도달할 수 없어 통신에 실패하게 됩니다.

이와 같이 파드의 IP는 언제든지 바뀔 수 있기에 우리는 파드 대신 서비스를 통해 통신하는 방식을 사용합니다. Service는 고정된 IP 주소를 제공하며, 서비스가 삭제되지 않는 한 뒤에 연결된 파드가 재생성되더라도 동일한 주소로 접근할 수 있습니다. 또한 Service는 파드에 설정된 라벨을 기준으로 대상 파드를 선택해 트래픽을 전달합니다.

결론적으로 Service는 고정된 주소를 제공하는 역할을 하며 대표적인 Service 유형은 크게 3가지(ClusterIP / NodePort / LoadBalancer)로 나눌 수 있습니다.
ClusterIP
ClusterIP는 가장 기본적인 Service 타입으로 클러스터 내부에서만 접근 가능한 IP 주소를 생성합니다. 이 IP는 클러스터 외부에서는 접근할 수 없으며, 클러스터 내부 통신에 사용됩니다. 아래 그림과 같이 Backend 파드와 DB 파드가 통신하는 경우, Backend 파드는 DB 파드의 IP를 직접 호출하지 않고 db-service와 같은 ClusterIP 서비스를 통해 통신합니다.

NodePort
NodePort는 클러스터의 각 노드에 동일한 포트를 열어, 외부에서 NodeIP:NodePort 형태로 접근할 수 있도록 합니다. NodePort 서비스가 생성되면 클러스터 내부 통신을 위한 ClusterIP도 함께 생성되며, 외부 요청은 NodePort ➝ Service(port) ➝ Pod(targetPort) 순서로 전달됩니다. 이 포트는 특정 노드에만 열리는 것이 아니라 클러스터의 모든 노드에 동일하게 열리므로, 사용자는 어느 노드의 IP로 접속하더라도 동일한 서비스에 접근할 수 있습니다.

또한 NodePort로 들어온 요청은 접속한 노드에 파드가 존재하더라도, 기본 설정(externalTrafficPolicy: Cluster)에서는 클러스터 전체 파드 중 다른 노드의 파드로도 전달될 수 있습니다.

nodePort 범위는 30000–32767이며, 생략 시 해당 범위 내에서 자동으로 할당됩니다.

Load Balancer
NodePort는 외부에서 접근하려면 각 노드의 IP와 NodePort 번호를 직접 알아야 접근할 수 있습니다. 반면 LoadBalancer는 클라우드 환경에서 외부 접속용 IP 또는 DNS가 자동으로 할당되므로, 사용자는 노드 IP를 알 필요 없이 하나의 고정된 주소로 서비스에 접근할 수 있습니다.

externalTrafficPolicy 옵션
위에서 설명했듯이 외부에서 NodePort 또는 LoadBalancer로 유입된 요청은 요청을 받은 노드의 Pod가 처리할 수도 있고 다른 노드의 Pod로 전달될 수도 있습니다. externalTrafficPolicy 옵션은 외부 트래픽을 로컬 노드의 Pod로만 전달할지 또는 클러스터 전체 Pod로 전달할지를 결정합니다.
Cluster (기본값)
Cluster 모드에서는 외부에서 유입된 트래픽이 클러스터 전체 Pod를 대상으로 분산됩니다. 요청은 로드밸런싱을 통해 여러 노드에 있는 Pod로 전달되며, 이 과정에서 클라이언트 IP가 트래픽을 전달한 노드의 IP로 변경됩니다.
Local
Local 모드에서는 외부 트래픽이 요청을 받은 노드에 있는 Pod로만 전달됩니다. 다른 노드로의 트래픽 전달이 발생하지 않아, Pod에서는 클라이언트의 실제 IP를 그대로 확인할 수 있습니다.

마무리하며
Kubernetes는 알면 알수록 복잡한 세계이다 🌀
'Kubernetes' 카테고리의 다른 글
| VMware Fusion에 k3s 멀티 노드 클러스터 구축하기 (0) | 2026.05.02 |
|---|---|
| 디플로이먼트(Deployment) 스케일링과 업데이트의 동작방식 (0) | 2026.04.05 |
| 쿠버네티스의 Pod와 Deployment에 관하여 (0) | 2026.04.03 |
| Ansible을 이용해 Kubernetes Cluster 구축해보기 (0) | 2025.12.25 |
| EKS를 안전하게 운영하는 방법(feat. IAM 계정 분리와 Bastion 연동) (3) | 2025.12.21 |