준비
이번에도 istio 설치된 클러스터에 bookinfo app을 준비한다. 요청 타임아웃을 review 서비스에 구성할건데 그 효과를 보기 위해, 타임아웃까지 응답이 오지 않도록, rating 서비스에 2초의 지연이 발생하는 결함을 주입한다.
먼저 모든 요청이 review:v2 로 가도록 한다:
k apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
EOF
Shell
복사
그리고 rating 에 지연 결합을 주입한다:
$ k apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- fault:
delay:
percentage:
value: 100
fixedDelay: 2s
route:
- destination:
host: ratings
subset: v1
EOF
Shell
복사
그러면 2초 후에 review:v2 에 대한 응답이 온다:
요청 타임아웃
이제 reviews 요청에 대한 0.5초의 타임아웃을 구성한다:
$ k apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
timeout: 0.5s
EOF
Shell
복사
❯ k diff -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
timeout: 0.5s
EOF
diff -u -N /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-113615660/networking.istio.io.v1alpha3.VirtualService.default.reviews /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-2255124966/networking.istio.io.v1alpha3.VirtualService.default.reviews
--- /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/LIVE-113615660/networking.istio.io.v1alpha3.VirtualService.default.reviews2024-01-06 15:37:44.104097679 +0900
+++ /var/folders/4s/w6k_cdvd52s1hst64dr_yw540000gn/T/MERGED-2255124966/networking.istio.io.v1alpha3.VirtualService.default.reviews 2024-01-06 15:37:44.104330259 +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":"v2"}}]}]}}
creationTimestamp: "2024-01-06T06:32:41Z"
- generation: 1
+ generation: 2
name: reviews
namespace: default
resourceVersion: "22911"
@@ -18,3 +18,4 @@
- destination:
host: reviews
subset: v2
+ timeout: 0.5s
Diff
복사
다시 새로고침하여 productpage를 요청하면 리뷰 부분이 기능 장애로 보이지 않는다(unavailable). 타임아웃으로 인해 1초 후에 실패한 것, 1초인 이유는 productpage에서 한 번 재시도를 하기 때문이다:
습득 교훈
•
타임아웃은 구성(설정)이자 기능(?)이다.
◦
앞서 본 결함 주입과 동작은 비슷하지만 검출(test) 목적이 아니다.