Concept
envoy xDS Sync는 Envoy 프록시가 동적으로 구성을 업데이트하고, 서비스 메시에서의 트래픽 관리를 최적화하는 과정을 의미한다.
여기서 xDS는 eXtensible Discovery Service의 약자로, Envoy 프록시와 구성 관리 시스템 간의 통신을 위한 일련의 프로토콜을 나타낸다.
Envoy 프록시는 서비스 메시를 구성하는 요소로 마이크로서비스 간의 통신을 중개하고, 로드밸런싱, timeout, circuit breaker와 같은 기능을 제공한다. 이러한 기능을 수행하기 위해 Envoy 프록시는 자신의 구성 정보를 최신 상태로 유지해야한다.
여기서 xDS Sync는 다음과 같은 일련의 xDS 프로토콜을 통해 Envoy 프록시의 동적 구성을 가능하게 한다.
- LDS (Listener Discovery Service) : 수신 연결을 위한 리스너 구성을 제공
- RDS (Route Discovery Service) : HTTP 라우팅 정보를 제공
- CDS (Cluster Discovery Service) : 업스트림 서비스 클러스터 정보를 제공
- EDS (Endpoint Discovery Service) : 개별 업스트림 서비스 인스턴스의 IP 주소와 포트를 제공
위 프로토콜들을 통해 Envoy 프록시는 구성 관리 시스템(Control Plane)으로부터 실시간으로 구성 정보를 받아, 서비스 메시의 상태 변화에 신속하게 대응하게 된다.
동작 이해하기 - Dynamic Runtime Proxy Configuration Update
Pilot은 Envoy 프록시에게 xDS 프로토콜 (Listener, Route, Cluster, Endpoint, Secret Discovery Service)을 사용하여 동적 구성 정보를 전달한다. 이를 통해 Envoy 프록시는 다음과 같은 구성 업데이트를 수행할 수 있다.
- 서비스 추가/삭제: 새로운 서비스가 추가되거나 기존 서비스가 삭제될 때, Envoy 프록시는 클러스터 정보를 업데이트하여 이를 반영한다.
- 엔드포인트 변경: 서비스 인스턴스의 IP 주소나 포트가 변경되거나, 서비스 인스턴스가 추가/삭제될 때, Envoy 프록시는 엔드포인트 정보를 업데이트하여 이를 반영한다.
- 트래픽 라우팅 규칙 변경: 요청 경로, 가중치 기반 라우팅, 실패 시 재시도 등의 규칙이 변경되면, Envoy 프록시는 라우팅 구성을 업데이트하여 이를 반영한다.
- 보안 정책 변경: TLS 인증서, mTLS 설정 등의 보안 정책이 변경되면, Envoy 프록시는 이를 반영하여 구성을 업데이트한다.
이러한 동적 구성 업데이트를 통해 Istio는 서비스 메시의 유연성과 확장성을 향상시키며, 마이크로서비스 아키텍처의 복잡성을 줄일 수 있다.
Envoy 주요용어
- HOST: 논리적인 네트워크 애플리케이션. 물리적인 장비에 여러 개의 호스트 가능. 각각의 주소를 이용하는 애플리케이션들이 모두 하나의 호스트가 될 수 있음
- Downstream: Envoy에 요청을 보내고 응답을 받는 호스트. 요청을 보내는 클라이언트
- Upstream: Envoy로부터 요청을 받아서 응답을 보내는 호스트. 요청을 받아주는 서버
- Listener: 다운스트림 클라이언트에서 연결할 수 있는 네트워크 위치(포트, 유닉스 도메인 소켓). Envoy는 다운스트림에서 연결할 수 있는 리스너를 하나 이상 제공
- Cluster: Envoy가 연결할 수 있는 논리적으로 비슷한 업스트림 호스트들의 그룹. 헬스체크와 로드밸런싱 정책을 설정할 수 있음
- Mesh: 안정적인 네트워크 토폴로지를 제공하도록 관리하는 호스트들의 그룹. “Envoy Mesh”라고 하면 Envoy Proxy들의 그룹을 의미
- Envoy(Runtime) configuration: 실행 중인 Envoy를 재시작하지 않고도 주요 설정들을 변경할 수 있는 기능
Envoy configuration
Envoy를 프록시로 사용할 때는 아래 4가지 개념을 알아야 한다.
- Listener: 처리할 IP, 포트 등을 정의. 예를 들어, 0.0.0.0:80으로 바인딩한 Listener을 사용해 alicek107.com이라는 도메인에 대해서만 요청을 처리할 수 있습니다.
- Route: Listener로 들어온 요청을 어디로 보낼지를 정의. 일반적으로는 Cluster로 라우팅된다.
- Cluster: 실제로 요청이 처리되는 IP 또는 다른 엔드포인트의 묶음
- Endpoint: 실제로 접근 가능한 IP(예: 172.17.0.2, 172.17.0.3)를 의미합니다. 엔드포인트가 모여 하나의 Cluster를 구성한다.
위 내용을 인지한 뒤 아래에서 istioctl 명령어를 통해 각 단계에서 어떤 내용들이 다루어 지는지 확인한다.
Istio에서 istioctl 명령어로 envoy 구성 확인하기
istioctl proxy-status
매쉬 내 각 Envoy에 대한 Pilot에서 마지막으로 보내어지고 승인된 xDS 동기화를 검색합니다. (from istioctl proxy-status --help)
➜ istioctl proxy-status --help
Retrieves last sent and last acknowledged xDS sync from Istiod to each Envoy in the mesh
[istioctl proxy-status]
➜ istioctl proxy-status
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION
details-v1-7d4d9d5fcb-j4zmj.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
istio-ingressgateway-56cd9f96d5-mxp2j.istio-system Kubernetes SYNCED SYNCED SYNCED NOT SENT NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
productpage-v1-66756cddfd-pg7wj.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
ratings-v1-85cc46b6d4-cnq4r.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
reviews-v1-777df99c6d-kknwm.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
reviews-v2-cdd8fb88b-chsdm.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
reviews-v3-58b6479b-ws2kp.bookinfo Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-7fd9d6dd48-97ww2 1.17.2
istioctl proxy-config [listener | route | cluster | endpoint ]
Envoy 구성에서 프록시 구성 정보를 검색하는 데 사용되는 명령어
istioctl proxy-config listener
지정된 pod에 있는 Envoy 인스턴스의 리스너 구성에 대한 정보를 검색한다.
[reviews-v3] pod의 envoy proxy listener 설정 확인
➜ istioctl proxy-config listener reviews-v3-58b6479b-ws2kp
- 9080: application port
- 15001: Envoy outbound
- 15006: Enovy inboud
istioctl proxy-config route
지정된 pod에 있는 Envoy 인스턴스의 라우트 구성 정보를 검색한다.
[reviews-v3] pod의 envoy proxy route 설정 확인
➜ istioctl proxy-config route reviews-v3-58b6479b-ws2kp
[reviews-v3] pod의 envoy proxy에서 9080 PORT에 대한 라우팅 정보를 json 형식으로 출력
➜ istioctl proxy-config route reviews-v3-58b6479b-ws2kp --name 9080 -o json
istioctl proxy-config cluster
지정된 pod에 있는 Envoy 인스턴스의 클러스터 구성 정보를 검색한다.
- 실제 요청이 처리되는 IP 또는 엔드포인트의 묶음
➜ istioctl proxy-config cluster reviews-v3-58b6479b-ws2kp
istioctl proxy-config endpoint
지정된 pod에 있는 Envoy 인스턴스의 엔드포인트 구성 정보를 검색한다.
'Cloud-native > Istio' 카테고리의 다른 글
[Istio]Configuring istio-ingressgateway with AWS ALB (0) | 2024.09.15 |
---|---|
[Istio]Install istio(istio-base, istio-gateway, istiod) with helm charts (0) | 2024.09.15 |
[Istio]Traffic Management - Request Routing(동적 요청 라우팅 구성하기) (0) | 2023.05.06 |
[Istio]Traffic Management - Overview (0) | 2023.05.06 |
[Istio]Deploy bookinfo sample application to demonstrate various Istio features (0) | 2023.04.23 |