xDS (x Discovery Service)란
[ 한 줄 정의 ]
- xDS는 프록시 설정을 동적으로 밀어넣는 API 규
- xDS는 Envoy Proxy에서 시작된 "동적 서비스 디스커버리 API의 집합"
- "x"는 여러 Discovery Service의 총칭을 의미
- Control Plane(예. Istio의 istiod)이 Data Plane(Envoy 같은 프록시)에게 "설정을 동적"으로
전달하는 "표준 프로토콜"
- 핵심 아이디어, 프록시를 "재시작"하거나 설정 파일을 "직접 수정하지 않고도", Control Plane이
"gRPC 스트리밍"을 통해 "실시간"으로 프록시 설정을 밀어넣는 것
전체 구조
Control Plane (istiod, go-control-plane 등)
|
| gRPC Streaming (ADS)
|
▼
Data Plane (Envoy Proxy)
|
|
▼
실제 트래픽 처리
-------------------------------------------
- Envoy는 부팅 시 bootstrap config에 명시된 Control Plane에 접속해서 xDS API를 통해 설정을
수신
- 이후에도 연결을 유지하면서 변경사항을 지속적으로 받아옴
각 Discovery Service 상세

LDS(Listener Discovery Service)
[ 기능 ]
- Envoy가 "어떤 포트에서 어떤 방식으로 트래픽을 수신"할지를 정의
[ 역할 ]
- 리스너(Port Binding + Protocol + Filter Chain) 설정 전달
[ K8s 비유 ]
- Service의 port 혹은 Ingress의 listen 설정
[ 포함 정보 ]
- 바인딩 주소/포트, filter chain(HTTP connection manager, TCP proxy 등), TLS context
[ 예시 ]
- "0.0.0.0:8080"에서 HTTP 트래픽을 받아서 HTTP connection manager 필터를 적용해라
RDS(Route Discovery Service)
[ 기능 ]
- 수신된 요청을 어떤 "클러스터(업스트림)로 라우팅할지 규칙"을 정의
[ 역할 ]
- HTTP 라우팅 테이블 전달
[ K8s 비유 ]
- Ingress rule 이나 VirtualServie의 라우팅 규칙
[ 포함 정보 ]
- 도메인 매칭, path 매칭, 헤더 기반 라우팅, weighted cluster(Carary 배포), retry/timeout
[ 예시 ]
- "Host: api.example.com" + "path: /v2/users" -> "cluster_user_service_v2"로 라우팅
CDS(Clutser Discovery Service)
[ 기능 ]
- 업스트림 서비스 그룹(클러스터)의 설정을 정의
- 여기서 "Cluster"는 K8s 클러스터가 아니라 "논리적인 업스트림 서비스 그룹"
[ 역할 ]
- 업스트림 클러스터의 연결 설정 전달
[ 포함 정보 ]
- 로그밸런싱 알고리즘(round robin, least request 등)
- connection pool 설정(max_connections, max request per connection)
- health check 설정
- circuit breaker 임계값
- outlier detection(이상 인스턴스 제거)
- TLS 업스트림 설정
[ 예시 ]
- "cluster_user_service"는 round robin LB, 최대 1024 연결, 5초 health check 주기
EDS(Endpoint Discovery Service)
[ 기능 ]
- 각 클러스터에 속한 실제 엔드포인트(IP:Port) 목록을 전달
[ 역할 ]
- 서비스 인스턴스의 "실제 주소 전달"
[ K8s 비유 ]
- Endpoints 리소스 (Pod IP 목록)
[ 포함 정보 ]
- IP:Port 목록, 각 엔드포인트의 가중치, locality(zone/region) 정보, health status
[ 예시 ]
- "clutser_user_service"의 Endpoint : 10.0.1.5:8080 (weight-3), 10.0.1.6:8080 (weight=1)
SDS (Secret Discovery Service)
[ 기능 ]
- TLS 인증서와 키를 동적으로 전달
[ 역할 ]
- 인증서/키/CA 번들의 동적 배포
[ 핵심 이점 ]
- 디스크에 인증서를 저장하지 않고 "메모리에서만 사용"
-> 보안 강화. 인증서 갱신 시 프록시 재시작 불필요
[ Istio에서 ]
- Citadel(istiod)이 각 사디으카에서 mTLS 인증서를 SDS로 자동 배포하고, 주기적으로 rotate
ECDS (Extension Config Discovery Service)