Ssoon

[7주차] Service Mesh : Traffic Management : Fault Injection 본문

쿠버네티스 네트워크 스터디 3기

[7주차] Service Mesh : Traffic Management : Fault Injection

구구달스 2024. 10. 15. 23:43
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기

 

Fault Injection

  • 서비스에 장애를 인위적으로 주입하여 시스템의 견고성을 테스트하는 기술
  • 마이크로서비스 아키텍처에서 시스템의 안정성을 평가하기 위해 고의로 장애를 발생시키는 과정입니다. 이를 통해 시스템이 예기치 않은 상황에서 어떻게 반응하는지를 확인할 수 있습니다. 예를 들어, 요청 지연, 실패한 응답, 또는 서비스의 비정상적인 동작 등을 유도하여 시스템의 복원력을 테스트합니다.

🧿 VirtualService 리소스 정의 (ratings 서비스에 대한 트래픽 라우팅 규칙 설정)

  • spec: 이 VirtualService의 세부 설정입니다.
    • hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. ratings 서비스에 대한 요청을 처리합니다.
  • http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
    • match: 요청이 이 규칙과 어떻게 일치하는지를 정의합니다.
      • headers: 요청 헤더를 기반으로 라우팅을 결정합니다.
        • end-user 헤더가 jason일 경우 이 규칙이 적용됩니다.
  • fault: 장애를 유도하는 설정입니다. 이 경우 특정 조건에 맞는 요청에 대해 지연을 발생시킵니다.
    • delay: 요청에 대한 지연을 설정합니다.
      • percentage: 이 규칙이 적용될 요청의 비율을 설정합니다. 여기서는 100%로 설정되어 있어, 조건이 만족될 경우 모든 요청에 적용됩니다.
      • fixedDelay: 요청을 지연시키는 시간을 설정합니다. 여기서는 7초의 고정 지연을 추가합니다.
  • 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일 경우 이 규칙이 적용됩니다.
  • fault: 장애를 유도하는 설정입니다. 이 경우 특정 조건에 맞는 요청에 대해 오류를 발생시킵니다.
    • abort: 요청을 중단시키는 설정입니다.
      • percentage: 이 규칙이 적용될 요청의 비율을 설정합니다. 여기서는 100%로 설정되어 있어, 조건이 만족될 경우 모든 요청에 적용됩니다.
      • httpStatus: 중단된 요청에 대해 반환할 HTTP 상태 코드입니다. 여기서는 500(서버 오류) 상태 코드가 반환됩니다.
  • 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
Comments