iBetter Books
교안 슬라이드
수정

ClusterIP · NodePort · LoadBalancer

Service를 만들 때 가장 먼저 결정해야 할 것이 있습니다. "이 서비스에 누가 접근할 수 있어야 하는가."

내부 마이크로서비스끼리만 통신하면 되는가, 아니면 외부 사용자가 직접 접근할 수 있어야 하는가. 그 답에 따라 Service 타입이 달라집니다.

타입 접근 범위 kind 지원 주요 사용 사례
ClusterIP 클러스터 내부만 완벽 지원 내부 마이크로서비스 통신
NodePort 노드 IP + 지정 포트 지원 개발/테스트 환경 외부 접근
LoadBalancer 외부 로드밸런서 pending 상태 클라우드 운영 환경

ClusterIP는 기본값입니다. 클러스터 안에서만 접근할 수 있는 가상 IP를 할당합니다. 외부에서는 이 IP로 직접 접근할 수 없습니다. 데이터베이스나 내부 API처럼 외부에 노출할 필요가 없는 서비스에 씁니다.

NodePort는 모든 노드의 특정 포트를 열어 외부 접근을 허용합니다. 포트 범위는 30000~32767입니다. 노드IP:포트 형태로 접근합니다. 설정이 간단해서 개발이나 테스트 환경에서 자주 씁니다.

LoadBalancer는 클라우드 프로바이더(AWS, GCP, Azure)의 로드밸런서와 연동해 외부 IP를 자동으로 할당합니다. kind 같은 로컬 환경에서는 이 IP를 발급해줄 클라우드가 없기 때문에 EXTERNAL-IP가 영원히 <pending> 상태로 남습니다.

kind 환경에서 외부 접근이 필요할 때는 두 가지 방법이 실용적입니다. NodePort로 Service 타입을 설정하거나, ClusterIP인 채로 두고 kubectl port-forward로 로컬 포트를 연결하는 방법입니다. port-forward는 다음 절에서 자세히 다룹니다.

학습 환경에서는 ClusterIP로 대부분의 실습을 진행하고, 브라우저로 확인이 필요할 때만 port-forward를 쓰는 패턴을 권장합니다.