8.1.2 쿠버네티스 IP 주소 종류
쿠버네티스 환경에서 애플리케이션을 배포하고 운영하다 보면 다양한 종류의 IP 주소들을 마주하게 됩니다. 이 IP 주소들은 각각 고유한 역할과 사용 범위를 가지고 있으며, 이들을 명확히 이해하는 것은 쿠버네티스 네트워킹의 동작 원리를 파악하고, 통신 문제를 해결하며, 서비스를 올바르게 노출하는 데 매우 중요합니다. 마치 도시에서 특정 건물을 찾아가거나, 특정 구역으로 물품을 배송할 때 정확한 주소 체계를 이해해야 하는 것과 같습니다.
이번 절에서는 쿠버네티스에서 흔히 접하게 되는 네 가지 주요 IP 주소 유형 – 파드 IP (Pod IP), 노드 IP (Node IP), 클러스터 IP (Cluster IP), 그리고 외부 IP (External IP) – 에 대해 자세히 알아보고, 각 IP 주소가 어떤 역할을 수행하며 어떤 범위 내에서 유효한지 명확히 구분해 보겠습니다.
8.1.2.1 각 IP 주소의 역할과 범위
쿠버네티스 클러스터 내외부에서 통신이 이루어질 때, 이 네 가지 IP 주소는 각각 서로 다른 계층과 목적을 가지고 상호작용합니다. 각 IP 주소의 특징을 이해하면, 네트워크 트래픽이 어떻게 흐르고, 서비스가 어떻게 노출되며, 파드들이 어떻게 서로를 찾아가는지 큰 그림을 그릴 수 있게 됩니다.
- 파드 IP (Pod IP):
- 역할: 쿠버네티스에서 실행되는 가장 작은 배포 단위인 파드(Pod) 각각에 할당되는 고유한 IP 주소입니다. 앞서 “8.1.1.1 모든 파드는 고유 IP를 가진다”에서 자세히 설명했듯이, 이 IP 주소는 파드 내의 모든 컨테이너가 공유하며, 파드가 네트워크 상에서 식별되는 기본 주소입니다. 파드 IP는 클러스터 내부 네트워크에서 직접 라우팅 가능해야 하며, 다른 파드나 노드와 통신할 때 사용됩니다.
- 범위 및 생명주기: 파드 IP는 클러스터 내부에서만 유효한 사설 IP 주소입니다. 즉, 클러스터 외부에서는 이 IP 주소로 직접 파드에 접근할 수 없습니다 (특별한 네트워크 구성이 없는 한). 파드 IP는 파드가 생성될 때 CNI 플러그인에 의해 동적으로 할당되며, 파드가 삭제되거나 재시작(새로운 파드로 교체)되면 일반적으로 변경될 수 있는 비영속적인(ephemeral) 주소입니다. 이러한 비영속성 때문에, 애플리케이션이 다른 애플리케이션(파드)과 안정적으로 통신하기 위해서는 파드 IP를 직접 사용하는 대신 서비스(Service)를 통해 접근하는 것이 권장됩니다.
- 예시: 10.244.1.5, 172.17.0.3 등 (CNI 플러그인 및 클러스터 구성에 따라 대역이 달라짐)
- 노드 IP (Node IP):
- 역할: 쿠버네티스 클러스터를 구성하는 각 워커 노드(Worker Node) 또는 마스터 노드(Master Node) 자체에 할당된 IP 주소입니다. 이는 물리적 서버 또는 가상 머신(VM)의 네트워크 인터페이스에 부여된 실제 IP 주소로, 해당 노드가 속한 물리적 또는 가상 네트워크 환경에서 통신하는 데 사용됩니다. 노드는 이 IP 주소를 통해 다른 노드와 통신하고, 외부 네트워크와 연결되며, 때로는 파드에서 노드에서 실행 중인 특정 서비스(예: kubelet API, Node Exporter)에 접근할 때 사용되기도 합니다.
- 범위 및 생명주기: 노드 IP는 일반적으로 해당 노드가 속한 인프라 네트워크(예: 온프레미스 데이터센터 네트워크, 클라우드 제공업체의 VPC 네트워크)에서 할당받는 IP 주소입니다. 이 IP 주소는 클러스터 외부에서도 접근 가능할 수 있으며(특히 클라우드 환경의 경우 외부 IP를 가질 수 있음), 노드가 존재하는 동안에는 일반적으로 변경되지 않는 비교적 안정적인 주소입니다. 하지만 노드가 교체되거나 재부팅 시 DHCP 설정에 따라 변경될 가능성도 있습니다.
- 예시: 192.168.1.100 (사설망), 203.0.113.45 (공인 IP) 등
- 클러스터 IP (Cluster IP):
- 역할: 쿠버네티스 서비스(Service) 오브젝트에 할당되는 가상 IP 주소입니다. 서비스는 논리적으로 동일한 기능을 수행하는 파드 그룹에 대한 안정적인 단일 접근 지점(endpoint)을 제공하는 역할을 합니다. 클라이언트(다른 파드 또는 애플리케이션)는 이 클러스터 IP와 서비스 포트를 사용하여 해당 서비스에 요청을 보내고, 서비스는 이 요청을 실제 백엔드 파드 중 하나로 로드 밸런싱하여 전달합니다. 클러스터 IP는 파드 IP의 비영속성 문제를 해결하고, 서비스 디스커버리를 가능하게 하는 핵심 요소입니다.
- 범위 및 생명주기: 클러스터 IP는 클러스터 내부에서만 유효한 가상 IP 주소이며, 클러스터 외부에서는 직접 접근할 수 없습니다. 이 IP 주소는 서비스가 생성될 때 쿠버네티스 API 서버에 의해 서비스 CIDR 대역(클러스터 구성 시 설정됨)에서 할당되며, 서비스가 존재하는 동안에는 변경되지 않는 안정적인(stable) 주소입니다. kube-proxy와 같은 컴포넌트가 각 노드에서 이 가상 IP로 오는 트래픽을 실제 파드 IP로 전달하는 네트워킹 규칙(예: iptables, IPVS 규칙)을 관리합니다.
- 예시: 10.96.0.10, 10.100.200.5 등 (서비스 CIDR 대역 내)
- 외부 IP (External IP):
- 역할: 쿠버네티스 서비스를 클러스터 외부의 네트워크에서 접근 가능하도록 노출할 때 사용되는 IP 주소입니다. 주로 서비스 타입이 LoadBalancer일 경우 클라우드 제공업체의 로드밸런서에 의해 할당되거나, NodePort 서비스와 함께 외부 로드밸런서 또는 방화벽 규칙을 통해 특정 노드의 IP와 포트에 매핑될 때 사용될 수 있습니다. 또한, ExternalIPs 필드를 사용하여 특정 외부 IP 주소를 서비스에 직접 할당할 수도 있습니다 (이 경우 해당 IP로의 라우팅은 외부에서 관리되어야 함).
- 범위 및 생명주기: 외부 IP는 인터넷이나 외부 사설망과 같이 클러스터 외부 네트워크에서 라우팅 가능하고 접근할 수 있는 IP 주소입니다. 이 IP 주소의 할당 방식과 생명주기는 서비스 타입 및 클러스터 환경(온프레미스, 클라우드)에 따라 크게 달라집니다. LoadBalancer 타입 서비스의 경우, 클라우드 로드밸런서가 존재하는 동안 유지되는 공인 IP 주소일 수 있습니다. NodePort 서비스의 경우, 실제로는 노드의 외부 IP를 사용하게 됩니다.
- 예시: 클라우드 로드밸런서에 할당된 공인 IP 주소 (예: 34.123.45.67)
이 네 가지 IP 주소 유형은 쿠버네티스 네트워킹의 서로 다른 측면을 나타냅니다. 파드 IP는 개별 워크로드 인스턴스의 가장 기본적인 네트워크 식별자이며, 노드 IP는 이러한 워크로드가 실행되는 물리적/가상 인프라의 주소입니다. 클러스터 IP는 동적인 파드 그룹에 대한 안정적인 내부 서비스 추상화를 제공하며, 외부 IP는 이러한 내부 서비스를 외부 세계와 연결하는 다리 역할을 합니다.
이들의 관계를 간단히 요약하면 다음과 같습니다.
- 외부 사용자는 외부 IP (예: 로드밸런서 IP)를 통해 서비스에 접근합니다.
- 이 요청은 쿠버네티스 내부의 클러스터 IP (서비스 IP)로 전달됩니다.
- 서비스는 이 요청을 실제 작업을 수행하는 여러 파드 IP 중 하나로 로드 밸런싱합니다.
- 이 모든 파드와 서비스 트래픽은 물리적 또는 가상 노드 IP를 가진 노드들의 네트워크를 통해 전달됩니다.
각 IP 주소의 역할과 범위를 정확히 이해하는 것은 쿠버네티스에서 애플리케이션을 설계, 배포, 트러블슈팅하는 데 있어 매우 중요합니다. 예를 들어, “왜 내 파드 IP로 외부에서 직접 접속이 안 되지?” 또는 “서비스의 클러스터 IP는 언제 사용하고, 노드 IP는 언제 사용하는 거지?” 와 같은 질문에 명확한 답을 할 수 있게 될 것입니다.