Concept
Istio의 트래픽 라우팅 규칙을 사용하면 서비스 간의 트래픽 및 API 호출 흐름을 쉽게 제어할 수 있다.
Istio는 circuit breakers, timeouts, retries같은 서비스 수준의 구성을 간소화하며, A/B 테스트, 카나리 배포 및 퍼센트 기반 트래픽 분할과 같은 작업을 쉽게 설정할 수 있다.
Istio의 트래픽 관리 모델은 서비스와 함께 배포되는 Envoy 프록시에 의존한다. 메시 서비스가 보내고 받는 모든 트래픽(data plane traffic)은 Envoy를 통해 프록시된다. 이를 통해 서비스를 변경하지 않고 메시 내에서 트래픽을 직접 제어하고 관리할 수 있다.
서비스 메쉬 성숙도 모델
아래 그림의 화살표 순으로 고도화된 서비스 메쉬를 완성해갈 수 있다.
Kubernetes Traffic의 이해
- Pods는 kubernetes에서 가장 작은 컴퓨팅 단위이다.
- Label은 kubernetes의 리소스를 식별하기 위해 사용되는 key/value이다.
- ReplicaSet은 원하는 수의 pod 복제본이 실행되도록 한다.
- ConfigMap은 pod가 사용하는 구성 데이터를 보유한다.
- Services는 DNS 이름을 제공하는 일련의 논리적인 pod 집합의 추상화이다.
- Ingress는 백엔드에 의해 정의된 엔드포인트에 들어오는 연결을 허용하는 규칙의 모음이다.
Istio Traffic의 이해
- Gateway는 HTTP/TCP 트래픽을 위한 로드 밸런서를 구성하며, 서비스 메시로의 인그레스 트래픽을 활성화한다.
- Virtual Service는 서비스로의 요청이 서비스 메시 내에서 어떻게 라우팅되는지 제어하는 규칙을 정의한다.
- Destination Rule은 VirtualService 라우팅 후 적용되는 정책 집합을 구성한다.
- Service Version(Subset)은 라벨을 기반으로 Pods의 subset을 선택할 수 있다.
- Service Entry는 서비스 메시 외부의 서비스로의 요청을 가능하게 한다.
Virtual Service
트래픽 라우팅 구성
- 서비스 호출에 대한 Request 라우팅 룰 구성
- 순서대로 평가되는 일련의 라우팅 규칙 구성
- 요청을 서비스메시에 정의된 서비스에 매핑하는 것을 추상화한다.
라우팅 규칙
- 프로토콜별로 매칭 조건을 정의하고, 조건을 만족하면 레지스트리에 정의된 서비스로 라우팅
- L4, L7 헤더 기반의 조건을 정의할 수 있고, 선택된 서비스 버전간의 가중치 라우팅이 가능함
Destination Rule
트래픽 정책 구성
- 라우팅이 발생한 후 서비스 트래픽에 적용되는 정책을 정의
- 적용 가능한 Traffic Policy
- Load Balancing Policy
- Connection Pool Size
- Outlier Detection
사이드카 컨테이너 확인
productpage POD 안의 istio-proxy 컨테이너 접속 후 프로세스 목록 조회
➜ k exec -it productpage-v1-66756cddfd-pg7wj -c istio-proxy -- sh
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
istio-p+ 1 0 0 07:41 ? 00:00:06 /usr/local/bin/pilot-agent proxy sidecar --domain bookinfo.svc.cluster.lo
istio-p+ 13 1 0 07:41 ? 00:00:42 /usr/local/bin/envoy -c etc/istio/proxy/envoy-rev.json --drain-time-s 45
istio-p+ 27 0 0 14:31 pts/0 00:00:00 sh
istio-p+ 33 27 0 14:31 pts/0 00:00:00 ps -ef
$ ls -l /etc/istio/proxy
total 24
srw-rw-rw- 1 istio-proxy istio-proxy 0 May 1 07:41 XDS
-rw-r--r-- 1 istio-proxy istio-proxy 18102 May 1 07:41 envoy-rev.json
-rw-r--r-- 1 istio-proxy istio-proxy 3202 May 1 07:41 grpc-bootstrap.json
$ cat /etc/istio/proxy/envoy-rev.json
{
"node": {
"id": "sidecar~10.77.112.151~productpage-v1-66756cddfd-pg7wj.bookinfo~bookinfo.svc.cluster.local",
"cluster": "productpage.bookinfo",
"locality": {
"region": "ap-northeast-2"
,
"zone": "ap-northeast-2b"
},
- pilot-agent, envoy 가 떠있다
/usr/local/bin/pilot-agent proxy sidecar
/usr/local/bin/envoy -c etc/istio/proxy/envoy-rev.json - envoy-rev.json: envoy 설정 파일
- XDS: Unix Domain Socket 통신
'Cloud-native > Istio' 카테고리의 다른 글
[Istio]Traffic Management - 무슨 일이 발생하는 건가?(envoy xDS Sync 이해하기) (0) | 2023.05.06 |
---|---|
[Istio]Traffic Management - Request Routing(동적 요청 라우팅 구성하기) (0) | 2023.05.06 |
[Istio]Deploy bookinfo sample application to demonstrate various Istio features (0) | 2023.04.23 |
[Istio]Install Istio with istioctl (0) | 2023.04.23 |
[Istio]What is Istio? (0) | 2023.04.23 |