
클러스터 IP란 쿠버네티스에서 Service 타입 중 기본값인 ClustIP가 가지는 내부 전용 IP를 말한다.
이게 기본 정의인데, 쉽게 풀어쓰자면
"클러스터 안에서만 접근 가능한 내부 IP주소"이다.
kubectl get svc
예를 들어 이렇게 service를 호출했을 때 ,
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
nginx-svc ClusterIP 10.96.0.12 <none> 80/TCP
이런식으로 나온다.
여기서 10.96.0.12가 바로 클러스터 IP이다.
이 주소는 Pod -> Service통신에는 사용되지만,
외부에서는 직접 접근할 수 없으며 외부 접근이 필요할 때에는, 전 게시물인 로드밸런서나 노드포트로 노출시켜줘야 한다.
헤드리스는 말그대로 머리가 없는 서비스이다.
즉, 고정 IP(ClusterIP)를 부여하지 않는 서비스이다.
apiVersion: v1
kind: Service
metadata:
name: my-headless
spec:
clusterIP: None # 이게 핵심
selector:
app: my-app
ports:
- port: 80
ClusterIP : None
이 설정이 있으면 쿠버네티스가 IP를 생성하지 않는다.
보통 Pod 각각에 직접 접근하고 싶을 때 사용한다.
예를 들어 StatefulSet(예: DB, Kafka, Redis 클러스터)처럼
각 Pod가 고유한 역할을 가지는 경우,
하나의 IP로 묶기보다 각 Pod를 DNS 이름으로 따로 접근해야 한다.
my-db-0.my-headless.default.svc.cluster.local
my-db-1.my-headless.default.svc.cluster.local
my-db-2.my-headless.default.svc.cluster.local
이렇게 각각의 Pod에 직접 접근 가능하게 된다.
구분 설명 접근 가능 위치 ClusterIP 클러스터 내부에서 접근 가능한 고정 IP 클러스터 내부만 Headless Service IP 없이 Pod 개별 DNS 이름으로 접근 Pod 개별 통신 시 유용
참고자료
[쿠버네티스 공식 홈페이지 - DNS for Services and Pods]
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/?utm_source=chatgpt.com
[쿠버네티스 공식 홈페이지 - Service]
https://kubernetes.io/docs/concepts/services-networking/service/?utm_source=chatgpt.com