Endpoints는 Kubernetes에서 Service와 연결된 파드(Pod)들의 네트워크 위치(IP와 포트)를 저장하는 리소스이다.
Service는 Endpoints를 참조하여 트래픽을 적절한 파드로 전달한다.
1. Endpoints의 역할
- 파드의 동적인 IP 관리: 파드는 삭제되거나 재생성될 때마다 새로운 IP를 가지므로, Endpoints는 현재 Service에 연결된 파드의 최신 IP와 포트를 저장한다.
- 트래픽 라우팅: Service는 트래픽을 Endpoints에 등록된 IP와 포트로 전달하여 여러 파드로 분산(로드 밸런싱)한다.
- 파드와 Service 연결: Selector 기반으로 Service와 일치하는 파드들의 네트워크 정보를 Endpoints로 자동 관리한다.
2. Endpoints의 구조
Endpoints는 kind: Endpoints로 정의되며, 연결된 파드의 네트워크 위치(IP와 포트)를 저장한다.
apiVersion: v1
kind: Endpoints
metadata:
name: my-service # Service 이름과 동일
subsets:
- addresses: # 연결된 파드의 IP 주소 목록
- ip: 192.168.1.1
- ip: 192.168.1.2
ports:
- port: 80 # Service의 포트와 매칭되는 파드의 포트
3. Service와 Endpoints의 관계
- Service는 Endpoints를 생성하고 관리하며, 연결된 파드의 네트워크 위치를 Endpoints에 기록한다.
- Service를 생성하면 Selector에 따라 Endpoints가 자동으로 생성된다.
- Service에 Selector가 정의된 경우: 해당 라벨을 가진 파드가 자동으로 Endpoints에 등록
- Service에 Selector가 없는 경우: Endpoints는 수동으로 관리해야 하며, IP와 포트를 직접 정의해야 한다.
# Selector 없는 Service
apiVersion: v1
kind: Service
metadata:
name: custom-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
# Endpoints 정의
apiVersion: v1
kind: Endpoints
metadata:
name: custom-service
subsets:
- addresses:
- ip: 192.168.1.100
ports:
- port: 80
6. Endpoints 확인
Endpoints는 kubectl 명령어를 사용해 확인할 수 있다.
- Endpoints 목록 보기
$ kubectl get endpoints
NAME ENDPOINTS AGE
my-service 10.244.0.2:8080 5m
custom-service 192.168.1.100:80 10m
- 특정 Endpoints 상세 보기
$ kubectl describe endpoints my-service
Name: my-service
Subsets:
Addresses: 10.244.0.2, 10.244.0.3
Ports:
Port: 8080 Protocol: TCP
Endpoints 활용
- 파드 연결 확인
- Service가 올바른 파드와 연결되었는지 확인할 때 Endpoints를 사용한다.
- Service의 Selector가 정확하지 않다면 Endpoints에 아무 것도 등록되지 않을 수 있다.
- 네트워크 디버깅 : 파드가 실행 중인데도 Service와 연결되지 않는다면 Endpoints를 확인하여 문제를 진단!
- 수동 Endpoints 설정: 외부 서비스나 클러스터 외부의 리소스와 통합할 때 수동으로 Endpoints를 설정
EndpointSlice의 특징
- Endpoints를 여러 슬라이스로 나누어 관리
- 성능 향상 및 확장성 제공
- 자동 생성되며, Endpoints와 병행 사용 가능
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Rollout (0) | 2025.01.08 |
---|---|
[K8S] Static Pods (0) | 2025.01.07 |
[K8S] Deployment (0) | 2024.12.31 |
[K8S] kube-proxy (0) | 2024.12.28 |
[K8S] Kube-controller-manager (0) | 2024.12.24 |