본문 바로가기

Container/Kubernetes

[K8S] Endpoints

Endpoints는 Kubernetes에서 Service와 연결된 파드(Pod)들의 네트워크 위치(IP와 포트)를 저장하는 리소스이다.

Service는 Endpoints를 참조하여 트래픽을 적절한 파드로 전달한다.


1. Endpoints의 역할

  1. 파드의 동적인 IP 관리: 파드는 삭제되거나 재생성될 때마다 새로운 IP를 가지므로, Endpoints는 현재 Service에 연결된 파드의 최신 IP와 포트를 저장한다.
  2. 트래픽 라우팅: Service는 트래픽을 Endpoints에 등록된 IP와 포트로 전달하여 여러 파드로 분산(로드 밸런싱)한다.
  3. 파드와 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 활용

  1. 파드 연결 확인
    • Service가 올바른 파드와 연결되었는지 확인할 때 Endpoints를 사용한다.
    • Service의 Selector가 정확하지 않다면 Endpoints에 아무 것도 등록되지 않을 수 있다.
  2. 네트워크 디버깅 : 파드가 실행 중인데도 Service와 연결되지 않는다면 Endpoints를 확인하여 문제를 진단!
  3. 수동 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