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를 쓰는 패턴을 권장합니다.