🌐 Kubernetes Service를 만들면 생성되는 Endpoint의 의미
2026. 2. 22. 08:19ㆍk8s
Kubernetes에서 Service를 생성하면,
같은 이름의 Endpoint(Endpoints 리소스)가 자동으로 생성된다.
예:
kubectl create service clusterip my-service --tcp=80:80
이후 확인:
kubectl get endpoints
📌 Endpoint란 무엇인가?
Service가 실제로 트래픽을 전달할 Pod들의 "IP 목록"
즉,
Service = 가상 IP (로드밸런서 역할)
Endpoint = 실제 Pod IP 목록
🔎 구조 이해하기
예를 들어 Pod가 3개 있다고 가정:
Pod1 → 10.244.1.2
Pod2 → 10.244.1.3
Pod3 → 10.244.1.4
Service가 이 Pod들을 selector로 선택하면,
Endpoints는 다음과 같이 만들어진다:
my-service
└─ 10.244.1.2:80
└─ 10.244.1.3:80
└─ 10.244.1.4:80
🏗️ 동작 흐름
Service 생성
↓
Selector 기준 Pod 검색
↓
Pod IP 수집
↓
Endpoints 리소스 생성
↓
kube-proxy가 iptables/ipvs 규칙 생성
↓
트래픽 전달
📌 실제 확인 예시
kubectl get endpoints my-service
출력 예:
NAME ENDPOINTS AGE
my-service 10.244.1.2:80,10.244.1.3:80 1m
🔥 핵심 개념
Service는 단지:
"가상 IP (ClusterIP)"
일 뿐이다.
실제로 트래픽이 어디로 가는지는
👉 Endpoints가 결정한다.
📌 readinessProbe와의 관계
Pod에 readinessProbe가 있고 실패하면:
- Pod는 Service Endpoint 목록에서 제거됨
- 하지만 Pod는 재시작되지 않음
즉,
readiness 실패
↓
Endpoint 제거
↓
트래픽 차단
📌 Endpoints가 비어있으면?
kubectl get endpoints my-service
결과:
my-service <none>
의미:
- selector와 일치하는 Pod 없음
- Pod가 Ready 상태 아님
- Service로 접속해도 응답 없음
📌 Headless Service와 Endpoint
Headless Service:
clusterIP: None
이 경우:
- ClusterIP 없음
- DNS가 직접 Endpoint IP 반환
- StatefulSet에서 자주 사용
📌 수동 Endpoint 생성 가능
Selector 없는 Service의 경우:
kind: Endpoints
를 직접 만들어 외부 IP 연결 가능.
예:
- 외부 DB
- 외부 시스템
📊 Service vs Endpoint 비교
| 항목 | Service | Endpoint |
|---|---|---|
| 역할 | 가상 IP | 실제 Pod IP 목록 |
| 생성 | 사용자 | 자동 생성 |
| 트래픽 경로 | ClusterIP | Pod IP |
| readiness 영향 | O | 직접 반영 |
🎯 실무에서 중요한 이유
Service는 살아있어도 Endpoint가 비어있으면 의미 없음
트래픽 장애 시:
- Pod 확인
- readiness 상태 확인
- endpoints 확인
🏗️ 전체 구조 요약
Client
↓
Service (ClusterIP)
↓
Endpoints
↓
Pod'k8s' 카테고리의 다른 글
| 🔐 Kubernetes NetworkPolicy 완전 정리 (0) | 2026.02.22 |
|---|---|
| 🌐 Kubernetes Service Type 변경 방법 & 확인 방법 (0) | 2026.02.22 |
| 🚨 kubectl delete --force --grace-period=0 완전 정리 (0) | 2026.02.22 |
| 🩺 Kubernetes livenessProbe & readinessProbe 정리 (0) | 2026.02.22 |
| 📦 Kubernetes LimitRange 완전 정리 (0) | 2026.02.22 |