🌐 Kubernetes Service를 만들면 생성되는 Endpoint의 의미

2026. 2. 22. 08:19k8s

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가 비어있으면 의미 없음

  • 트래픽 장애 시:

    1. Pod 확인
    2. readiness 상태 확인
    3. endpoints 확인

🏗️ 전체 구조 요약

Client
   ↓
Service (ClusterIP)
   ↓
Endpoints
   ↓
Pod