Search

Istio Tasks; Traffic Management - Request Routing

준비

환경은 istio가 설치된 클러스터와 Bookinfo 샘플 앱이 설치된 곳에서 진행한다. 앞서 다른 글에서 각각 설명했다:

개요

Bookinfo 샘플 앱의 리뷰 서비스는 v1, v2, v3 총 세가지 버전이 있다.
v1으로만 요청이 가도록 라우팅을 구성할 것이다(v1은 별점이 없다).
사용자 jason 의 경우 v2로 요청되도록 구성할 것이다.

v1으로만 라우팅

$ k apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-all-v1.yaml virtualservice.networking.istio.io/productpage created virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created virtualservice.networking.istio.io/details created $ k get virtualservice -A NAMESPACE NAME GATEWAYS HOSTS AGE default bookinfo ["bookinfo-gateway"] ["*"] 46m default details ["details"] 6s default productpage ["productpage"] 6s default ratings ["ratings"] 6s default reviews ["reviews"] 6s
Shell
복사
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: productpage spec: hosts: - productpage http: - route: - destination: host: productpage subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: details spec: hosts: - details http: - route: - destination: host: details subset: v1 ---
YAML
복사
reviews 뿐만 아니라 모든 서비스(호스트)의 요청이 v1으로 가도록 하는 VirtualServices를 만든다. 적용하고 요청하면, 별점이 없는, v1 리뷰만 요청된다.

사용자 식별 기반 라우팅

$ k apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml virtualservice.networking.istio.io/reviews configured
YAML
복사
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: # 추가 규칙 - headers: end-user: exact: jason route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v1
YAML
복사
전에 이미 reviews VirtualService가 있기 때문에 적용하면 수정된다. end-user 라는 http 헤더에 일치 조건이 추가된 라우팅 규칙이 추가된다. http 헤더 end-user이 jason 일 경우 v2 리뷰로 요청이 간다. 헤더는 productpage 서비스에서 로그인한 사용자 이름으로 추가해 요청한다고 한다. 음? 로그인..? 이 샘플 페이지에 아주 간단한 로그인 기능이 있다.
비밀번호는 아무거나 치거나 안쳐도 로그인(sign in)이 된다. 그냥 데모를 위해 http 헤더 end-user만 username으로 받는 셈이다. 아무튼 jason으로 로그인하면 v2의 검은색 별점이 있는 리뷰 서비스를 확인 할 수 있다.
반면 로그아웃한 상태 또는 다른 username으로 로그인하면 v1으로 요청한다.

습득 교훈

엄청 간단한 실습이었다. istio의 핵심 기능이겠지만. CKAD에서 blue/green이나 canary 롤아웃을 구현할 때 명령형의 작업을 이렇게 선언적으로 할 수 있겠지 싶다.