Ssoon
[7주차] Service Mesh : Traffic Management : Fault Injection 본문
쿠버네티스 네트워크 스터디 3기
[7주차] Service Mesh : Traffic Management : Fault Injection
구구달스 2024. 10. 15. 23:43CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기
✅ Fault Injection
- 서비스에 장애를 인위적으로 주입하여 시스템의 견고성을 테스트하는 기술
- 마이크로서비스 아키텍처에서 시스템의 안정성을 평가하기 위해 고의로 장애를 발생시키는 과정입니다. 이를 통해 시스템이 예기치 않은 상황에서 어떻게 반응하는지를 확인할 수 있습니다. 예를 들어, 요청 지연, 실패한 응답, 또는 서비스의 비정상적인 동작 등을 유도하여 시스템의 복원력을 테스트합니다.
🧿 VirtualService 리소스 정의 (ratings 서비스에 대한 트래픽 라우팅 규칙 설정)
- spec: 이 VirtualService의 세부 설정입니다.
- hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. ratings 서비스에 대한 요청을 처리합니다.
- http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
- match: 요청이 이 규칙과 어떻게 일치하는지를 정의합니다.
- headers: 요청 헤더를 기반으로 라우팅을 결정합니다.
- end-user 헤더가 jason일 경우 이 규칙이 적용됩니다.
- headers: 요청 헤더를 기반으로 라우팅을 결정합니다.
- match: 요청이 이 규칙과 어떻게 일치하는지를 정의합니다.
- fault: 장애를 유도하는 설정입니다. 이 경우 특정 조건에 맞는 요청에 대해 지연을 발생시킵니다.
- delay: 요청에 대한 지연을 설정합니다.
- percentage: 이 규칙이 적용될 요청의 비율을 설정합니다. 여기서는 100%로 설정되어 있어, 조건이 만족될 경우 모든 요청에 적용됩니다.
- fixedDelay: 요청을 지연시키는 시간을 설정합니다. 여기서는 7초의 고정 지연을 추가합니다.
- delay: 요청에 대한 지연을 설정합니다.
- route: 요청을 어떤 서비스로 전달할지를 정의합니다.
- 첫 번째 라우트: end-user가 jason인 경우, ratings 서비스의 v1 서브셋으로 라우팅됩니다.
- 두 번째 라우트: end-user가 jason이 아닐 경우에도 동일하게 ratings 서비스의 v1 서브셋으로 라우팅됩니다.
- 조건 매칭: 사용자가 end-user 헤더에 jason을 포함하여 요청을 보낼 경우, 100%의 확률로 7초의 지연이 됩니다.
- 라우팅: 모든 요청(조건에 관계없이)이 ratings 서비스의 v1 서브셋으로 라우팅됩니다.
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# cat virtual-service-ratings-test-delay.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- match:
- headers:
end-user:
exact: jason
fault:
delay:
percentage:
value: 100.0
fixedDelay: 7s
route:
- destination:
host: ratings
subset: v1
- route:
- destination:
host: ratings
subset: v1
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f virtual-service-ratings-test-delay.yaml
virtualservice.networking.istio.io/ratings configured
🧿 조건 매칭
사용자가 end-user 헤더에 jason을 포함하여 요청을 보낼 경우, 100%의 확률로 7초의 지연이 됩니다.
- sign out 시 출력 내용 확인
🧿 DC (DownstreamConnectionTermination)
- 클라이언트(Downstream)와 서비스(Upstream) 간의 연결 종료를 의미합니다.
🧿 VirtualService 리소스 정의 (ratings 서비스에 대한 트래픽 라우팅 규칙 설정)
- spec: 이 VirtualService의 세부 설정입니다.
- hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. 이 경우, ratings 서비스에 대한 요청을 처리합니다.
- http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
- match: 요청이 이 규칙과 어떻게 일치하는지를 정의합니다.
- headers: 요청 헤더를 기반으로 라우팅을 결정합니다.
- end-user 헤더가 jason일 경우 이 규칙이 적용됩니다.
- headers: 요청 헤더를 기반으로 라우팅을 결정합니다.
- match: 요청이 이 규칙과 어떻게 일치하는지를 정의합니다.
- fault: 장애를 유도하는 설정입니다. 이 경우 특정 조건에 맞는 요청에 대해 오류를 발생시킵니다.
- abort: 요청을 중단시키는 설정입니다.
- percentage: 이 규칙이 적용될 요청의 비율을 설정합니다. 여기서는 100%로 설정되어 있어, 조건이 만족될 경우 모든 요청에 적용됩니다.
- httpStatus: 중단된 요청에 대해 반환할 HTTP 상태 코드입니다. 여기서는 500(서버 오류) 상태 코드가 반환됩니다.
- abort: 요청을 중단시키는 설정입니다.
- route: 요청을 어떤 서비스로 전달할지를 정의합니다.
- 첫 번째 라우트: end-user가 jason인 경우, 요청은 ratings 서비스의 v1 서브셋으로 라우팅되지만, 동시에 500 상태 코드로 오류를 발생시킵니다.
- 두 번째 라우트: end-user가 jason이 아닐 경우에도 동일하게 ratings 서비스의 v1 서브셋으로 라우팅됩니다. 이 경로에는 오류가 발생하지 않으며, 정상적으로 요청이 처리됩니다.
- 조건 매칭: 사용자가 end-user 헤더에 jason을 포함하여 요청을 보낼 경우, 해당 요청은 500 상태 코드로 중단됩니다. 이 경우 사용자는 서버 오류를 경험하게 됩니다.
- 라우팅: 모든 요청(조건에 관계없이)이 ratings 서비스의 v1 서브셋으로 라우팅됩니다.
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# cat virtual-service-ratings-test-abort.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- match:
- headers:
end-user:
exact: jason
fault:
abort:
percentage:
value: 100.0
httpStatus: 500
route:
- destination:
host: ratings
subset: v1
- route:
- destination:
host: ratings
subset: v1
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f virtual-service-ratings-test-abort.yaml
virtualservice.networking.istio.io/ratings configured
🧿 조건 매칭
사용자가 end-user 헤더에 jason을 포함하여 요청을 보낼 경우, 해당 요청은 500 상태 코드로 중단됩니다.
🧿 FI (FaultInjected)
- 오류 주입을 통해 지정된 응답 코드로 요청이 중단
🧿 virtual-service-all-v1.yaml 파일에 정의된 모든 가상 서비스를 삭제
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl delete -f virtual-service-all-v1.yaml
virtualservice.networking.istio.io "productpage" deleted
virtualservice.networking.istio.io "reviews" deleted
virtualservice.networking.istio.io "ratings" deleted
virtualservice.networking.istio.io "details" deleted
'쿠버네티스 네트워크 스터디 3기' 카테고리의 다른 글
[7주차] Service Mesh : Traffic Management : Request Timeouts (0) | 2024.10.15 |
---|---|
[7주차] Service Mesh : Traffic Management : Traffic Shifting (0) | 2024.10.15 |
[7주차] Service Mesh : Traffic Management : Request Routing (0) | 2024.10.15 |
[7주차] Service Mesh : Bookinfo 실습 & Istio 기능 (0) | 2024.10.15 |
[7주차] Service Mesh : Istio 통한 외부 노출 (0) | 2024.10.15 |
Comments