준비
환경은 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 롤아웃을 구현할 때 명령형의 작업을 이렇게 선언적으로 할 수 있겠지 싶다.