Search

Istio Tasks; Traffic Management - Traffic Shifting

준비

Istio Tasks; Traffic Management - Request Routing 의 개요까지, bookinfo 샘플 앱의 모든 요청을 v1으로 라우팅 하도록 virtualservice를 구성하고 진행해야 한다.
직전 실습, fault injection, 까지 진행했다면 다음 명령으로 virtualservices 구성을 바꾸자
$ k apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-all-v1.yaml
Shell
복사
reviews 가 별점 없는 v1으로 렌더되는 것을 확인하자(사용자 jason 이든 아니든 노상관):

가중치 기반 라우팅

$ k apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
Shell
복사
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 50 - destination: host: reviews subset: v3 weight: 50
YAML
복사
❯ k diff -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml diff -u -N /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-866140811/networking.istio.io.v1alpha3.VirtualService.default.reviews /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-2776931740/networking.istio.io.v1alpha3.VirtualService.default.reviews --- /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-866140811/networking.istio.io.v1alpha3.VirtualService.default.reviews 2023-12-30 16:24:02.534816537 +0900 +++ /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-2776931740/networking.istio.io.v1alpha3.VirtualService.default.reviews 2023-12-30 16:24:02.535007162 +0900 @@ -5,7 +5,7 @@ kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"networking.istio.io/v1alpha3","kind":"VirtualService","metadata":{"annotations":{},"name":"reviews","namespace":"default"},"spec":{"hosts":["reviews"],"http":[{"route":[{"destination":{"host":"reviews","subset":"v1"}}]}]}} creationTimestamp: "2023-12-27T15:00:58Z" - generation: 5 + generation: 6 name: reviews namespace: default resourceVersion: "941359" @@ -18,3 +18,8 @@ - destination: host: reviews subset: v1 + weight: 50 + - destination: + host: reviews + subset: v3 + weight: 50
Diff
복사
v1으로만 라우팅하던 reviews 서비스를 v1:v3이 50:50이 되도록 했다.
브라우저에서 새로고침을 여러번 하면 v3 또는 v1의 응답이 보인다.
kiali Services > reviews 에서도 실제 요청된 가중치를 확인할 수 있다. 좁은 곳에 꽉꽉 그려서 뭔가 오픈소스의 귀여움이 있다(데이터독 쓰다 그라파나 봤을 때의 느낌?.. ㅎㅎ). 나의 경우 v1:v3가 51.9:48.1로 거의 구성 값에 수렴했다.
v3 최대로!(100%)
$ k apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-v3.yaml
Shell
복사
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3
YAML
복사
❯ k diff -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-v3.yaml diff -u -N /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-3502119672/networking.istio.io.v1alpha3.VirtualService.default.reviews /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-1161443412/networking.istio.io.v1alpha3.VirtualService.default.reviews --- /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-3502119672/networking.istio.io.v1alpha3.VirtualService.default.reviews 2023-12-30 16:35:54.076056897 +0900 +++ /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-1161443412/networking.istio.io.v1alpha3.VirtualService.default.reviews 2023-12-30 16:35:54.076287523 +0900 @@ -5,7 +5,7 @@ kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"networking.istio.io/v1alpha3","kind":"VirtualService","metadata":{"annotations":{},"name":"reviews","namespace":"default"},"spec":{"hosts":["reviews"],"http":[{"route":[{"destination":{"host":"reviews","subset":"v1"},"weight":50},{"destination":{"host":"reviews","subset":"v3"},"weight":50}]}]}} creationTimestamp: "2023-12-27T15:00:58Z" - generation: 6 + generation: 7 name: reviews namespace: default resourceVersion: "944164" @@ -17,9 +17,4 @@ - route: - destination: host: reviews - subset: v1 - weight: 50 - - destination: - host: reviews subset: v3 - weight: 50
Diff
복사
단순하게 가중치를 없애고 v3로만 라우팅 되도록 한다. 그 후엔 v3의 빨간 별점 만 확인할 수 있다.

습득 교훈

virtualservice에서 가중치 기반 버전(subset)별 라우팅을 할 수 있다.
트래픽 시프팅은 결국 손으로 하는거였다
istio의 기능은 가중치 기반 라우팅이고 진정한(자율적인?) 트래픽 시프팅은 구현해야 하는건가 싶다.
어쩌면 이런 트래픽 시프팅은 자동화의 대상이 아닐 수 있다; 어떤 메트릭을 시프팅 기준으로 삼을 수 있을까?
더 많은 걸 기대했건만…