Istio โBookinfoโ ๋ฐ๋ชจ
์ด๋ฒ ํฌ์คํธ์์ Istio ๊ณต์ ๋ฌธ์๋ก ๋์์๋ Bookinfo ์์ ๋ฅผ ๋ฐ๋ผ์ ์ค์ต ํด๋ณด๊ณ , ๊ทธ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. ๐
์ผ๋จ book info ์์ ์ ์ ์ฒด ๊ตฌ์กฐ๋ ์๋ ๋ค.
์ผ๋จ ๋์ฐ๊ณ ๋ณด์
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/platform/kube/bookinfo.yaml
๋ญ๊ฐ๊ฐ ์๋ฉ ๋ด๋ค!
Bookinfo๋ ์ผ์ข
์ โ์น์ฑโ์ด๋ค. ์ธ๋ถ์์ ์ดํ๋ฆฌ์ผ์ด์
์ ์ ๊ทผํ ์ ์๋๋ก IngressGateway
๋ฆฌ์์ค์ ๋ฌผ๋ ค๋ณด์. ์๋์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ฉด, Gateway
์ VirtualService
๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ค.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/bookinfo-gateway.yaml
Gateway
๋ฆฌ์์ค๋ istio์ default IngressGateway
์ธ isito-ingressgateway
์ ๋ฌผ๋ ค์๋ค.
ํด๋น default IngressGateway
๋ LoadBalancer
ํ์
์ K8s Service๋ก ๋
ธ์ถ๋๋ค.
ํด๋น K8s Service์ EXTERNAL-IP
์ธ 192.168.64.2
์ ์ ์ ํด๋ณด์!
์!! ์น์ฑ์ ์ ์ํ๋ค!!
kiali๋ก ํ์ธํ๋ฉด, ์ ์ฒด ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ค์ด์จ๋ค!
์ ์ฒด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๋ค์ ๋ณด๋ฉด, ๋ฆฌ๋ทฐ ํญ๋ชฉ์ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ด 3๊ฐ์ ๋ฒ์ ์ผ๋ก ๋๋ ์ ธ ์๋ค. ๊ทธ๋์ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจ(refresh) ํ ๋๋ง๋ค ์๋ 3๊ฐ์ง ๋ทฐ๊ฐ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ๋ณด์ธ๋ค.
- ๋ณ์ ์ด ์๋ ๋ทฐ
- ๋ณ์ ์ด ์์ผ๋ ๊ฒ์์์ผ๋ก ํ์๋๋ ๋ทฐ
- ๋ณ์ ์ด ์์ผ๋ ๋ถ์์์ผ๋ก ํ์๋๋ ๋ทฐ
์ด๋ฒ์๋ ๋ณ์ ์ด ๋ถ์์์ผ๋ก ๋ณด์ธ๋ค!
๋ฒ์ ๋ณ ํธ๋ํฝ ์ ์ดํ๊ธฐ
์ด๋ฒ์๋ istio์ DestinationRule
๊ณผ VirtualService
๋ฅผ ์ฌ์ฉํด์ ์ฑ ๋ฒ์ ๋ณ๋ก ํธ๋ํฝ์ ๋ถ์ฐํ๊ณ ์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ์ DestinationRule
๋ฆฌ์์ค๋ฅผ ๋จผ์ ์์ฑํ์. ๋ด์ฉ์ ๋ณ๊ฑฐ ์๊ณ ๊ทธ๋ฅ ์ฑ ๋ฒ์ ๋ณ subset๋ง ๋ถ๋ฆฌ๋์ด ์๋ค.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/destination-rule-all.yaml
๊ฐ Service ์๋ํฌ์ธํธ ๋ณ DestinationRule
๋ฆฌ์์ค๊ฐ ์ ์์ฑ ๋์๋ค!!
์ด์ ๋ถํฐ๋ istio์ Traffic Management / Request Routing ๋ฌธ์๋ฅผ ๋ณด๋ฉฐ, ๋ฒ์ ๋ณ ํธ๋ํฝ์ ์ ์ด ํด๋ณด์.
์ ๋ถ v1
์ ๋ผ์ฐํ
์๋ ์ปค๋งจ๋๋ก ์ ๋ถ v1
์ผ๋ก ๋ณด๋ด๋ VirtualService
๋ฅผ ์์ฑํ๋ค.
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-all-v1.yaml
์ด๋ ๊ฒ ํ๊ณ , ๋ค์ ์น์ฑ์ ์ ์ํด๋ณด๋ฉด, ๋ฆฌ๋ทฐ๋ง ๋ณด์ผ ๋ฟ ๋์ด์ ๋ณ์ ์ ๋ณด๋ ๋ณด์ด์ง ์๋๋ค.
Kiali๋ก ํ์ธํด๋ด๋, Reviews ์ํฌ๋ก๋์์ v1
์ผ๋ก๋ง ํธ๋ํฝ์ด ํ๋ฅด๊ณ ์๋ค!
๋ก๊ทธ์ธ ์ ๋ณด ์๋ ์ ์ ์๊ฒ v2
๋ก ๋ผ์ฐํ
๋๋๊ฒ๋!! bookinfo ์์ ์๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ๋ ๊ตฌํ๋์ด ์๋ค!! (,,โกoโก,,)
์ฐ์ธก ์๋จ์ Sign in
๋ฒํผ์ผ๋ก ๋ก๊ทธ์ธ ์ฐฝ์ ๋์์ ID/PW ๋๋ค jason
์ผ๋ก ์ ์ํ๋ฉด ๋ก๊ทธ์ธ์ด ๋๋ค!!
์ฐ๋ฆฐ ๋ก๊ทธ์ธํ ์ ์ ์๊ฒ๋ Review์ ๋ณ์ (rating)์ด ํจ๊ป ๋ณด์ด๋๋ก ํ๊ณ ์ถ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด Request Header ๊ธฐ๋ฐ์ผ๋ก routing ํ๋ VirtualService
๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํด๋ณด์!
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
์์ฐ! ์ ์ jason
์ ์ด์ ๋ฆฌ๋ทฐ์ ๋ณ์ ์ ๋ณด๋ ํ์ธํ ์ ์๊ฒ ๋์๋ค!!
Kiali๋ก ํ์ธํด๋ณด๋ฉด, ์ด์ v2
๋ก๋ ํธ๋ํฝ์ด ๊ฐ๊ณ ์๋ค!
๋งบ์๋ง
์ผํธ~~~ ์ด๊ฒ์ผ๋ก Istio์์ ์ ๊ณตํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ ์ธ bookinfo ์์ ๋ฅผ ๋ง๋ณด๊ธฐ ํ๋ค (ใฃหฺกหฯ)
์ฒ์์๋ ์์ ๋ ์ด๋ ค์ ๋ณด์๋๋ฐ, ๋ง์ ํ๋ผ๋ ๋๋ก ํด๋ณด๋ ๋ณ๋ก ์ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ๋ค ใ ใ ํนํ Kiali๋ก ๋คํธ์ํฌ Topology๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์์ด์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋๋ฐ ๋๋ฌด๋๋ฌด๋๋ฌด ํธํ๋ค!!
์ด์ Istio ์๊ฒฉ์ฆ ์ํ ์ค๋นํ๋ฉด์ ์กฐ๊ธ ๊น๊ฒ ๊ณต๋ถํ ๋ด์ฉ๋ค์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค ใ ใ
(๋ถ๋ก) ํ๋ฒ์ bookinfo ๋์ฐ๊ณ /๋ด๋ฆฌ๊ธฐ
bookinfo ์์ ๋ ์๊ฐ์ ์ด๊ธฐ๋ ํ๊ณ , ๊ฐ๋จํ๊ฒ MSA ๊ตฌ์กฐ๋ฅผ ๋์๋ณผ ์ ์๋ ์์ ๋ผ์ istio ๋ฌธ์์์ istio์ ๊ธฐ๋ฅ์ ์๊ฐํ ๋ ์ bookinfo ์์ ๋ฅผ ๋ฐํ์ผ๋ก ์ค๋ช ํ๋ ๊ฒ๋ค์ด ๊ฝค ์๋ค.
์๋ฅผ ๋ค๋ฉด, ์ด๋ ๊ฒ ๋์จ๋ค (istio์ Fault Injection ๋ฌธ์์ ํ ๋ถ๋ถ)
๊ทธ๋์ bookinfo ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์๋๊ณ ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ์คํํ๊ณ ์ตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ํ๋ฒ์ bookinfo ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์ฐ๊ณ , ๋ ๋ด๋ฆฌ๋ ์ปค๋งจ๋๋ฅผ ์ ๋ฆฌํด๋ดค๋ค.
# ๋์ธ ๋
# istiod, istio-ingressgateway, kiali๋ ์ด๋ฏธ ๋ด๋ค๊ณ ๊ฐ์
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/destination-rule-all.yaml
# ๋ด๋ฆด ๋
$ kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/destination-rule-all.yaml
$ kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/platform/kube/bookinfo.yaml