Ssoon

[7주차] Service Mesh : Traffic Management : Request Timeouts 본문

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

[7주차] Service Mesh : Traffic Management : Request Timeouts

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

Request Timeouts

클라이언트와 서버 간의 통신에서 요청이 일정 시간 내에 완료되지 않을 경우, 요청을 종료하는 설정을 의미합니다.

  • 서비스 안정성: 타임아웃을 설정하면 비정상적으로 오래 걸리는 요청을 조기에 종료할 수 있어, 서버 자원을 효율적으로 사용할 수 있습니다.
  • 사용자 경험 개선: 요청이 지연될 때 사용자에게 빠른 피드백을 제공하여 불편함을 줄일 수 있습니다.
  • 에러 감지: 타임아웃 설정은 서버의 성능 저하나 오류를 조기에 발견하는 데 도움이 됩니다.

🧿 VirtualService 리소스 정의 (트래픽 라우팅 규칙 설정)

  • spec: 이 VirtualService의 세부 설정입니다.
    • hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. productpage라는 이름의 서비스에 대해 요청을 처리합니다.
  • http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
    • route: 클라이언트의 요청을 어떤 서비스로 전달할지를 정의합니다.
      • destination: 요청이 전달될 서비스의 정보를 정의합니다.
        • host: 요청을 받을 서비스의 이름, 여기서는 productpage입니다.
        • subset: 요청이 전달될 서비스의 특정 서브셋(버전)을 정의합니다. 여기서는 v1으로 설정되어 있습니다.

VirtualService 정의는 클라이언트의 모든 HTTP 요청을  서비스의 v1 서브셋으로 라우팅합니다.

(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# cat virtual-service-all-v1.yaml
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
---
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f 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

🧿 VirtualService 리소스 정의 (reviews)

  • spec:
    • hosts: 이 VirtualService가 적용되는 서비스의 호스트 이름을 정의합니다. 여기서는 reviews라는 서비스입니다.
    • http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
      • route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
        • destination: 요청을 보낼 목적지를 정의합니다.
          • host: 요청을 전송할 서비스의 이름입니다. 여기서는 reviews.
          • subset: 서비스의 특정 버전이나 그룹을 지정합니다. 여기서는 v2 서브셋으로 지정되어 있습니다.

reviews 서비스에 대한 모든 HTTP 요청은 v2 서브셋으로 라우팅

(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# # kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
EOF
virtualservice.networking.istio.io/reviews configured

 

🧿 VirtualService 리소스 정의 (ratings)

  • spec:
    • hosts: 이 VirtualService가 적용될 서비스의 호스트 이름을 지정합니다. 여기서는 ratings 서비스입니다.
    • http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
      • fault: 장애 주입 설정을 정의합니다.
        • delay: 요청에 대한 지연을 설정합니다.
          • percent: 이 지연이 적용될 요청의 비율을 나타냅니다. 100%는 모든 요청에 적용됨을 의미합니다.
          • fixedDelay: 요청이 지연될 시간입니다. 여기서는 2초로 설정되어 있습니다.
      • route: 지연 후 요청이 전송될 목적지를 정의합니다.
        • destination: 요청을 보낼 서비스의 호스트와 서브셋을 정의합니다.
          • host: 요청을 전송할 서비스의 이름입니다. 여기서는 ratings.
          • subset: 서비스의 특정 버전입니다. 여기서는 v1로 설정되어 있습니다.

fault를 사용하여 모든 요청에 대해 2초의 지연을 추가하고, 요청을 ratings 서비스의 v1 서브셋으로 라우팅합니다. 

(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - fault:
      delay:
        percent: 100
        fixedDelay: 2s
    route:
    - destination:
        host: ratings
        subset: v1
EOF
virtualservice.networking.istio.io/ratings configured
  • 요청에 대해 2초의 지연 확인


🧿 VirtualService 리소스 정의 (reviews)

  • spec:
    • hosts: 이 VirtualService가 적용될 서비스의 호스트 이름을 지정합니다. 여기서는 reviews 서비스입니다.
    • http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
      • route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
        • destination: 요청을 보낼 목적지를 정의합니다.
          • host: 요청을 전송할 서비스의 이름입니다. 여기서는 reviews.
          • subset: 서비스의 특정 버전이나 그룹을 지정합니다. 여기서는 v2 서브셋으로 지정되어 있습니다.
      • timeout: 요청이 완료되기를 기다리는 최대 시간을 정의합니다. 여기서는 0.5초(500밀리초)로 설정되어 있습니다.

요청을 v2 서브셋으로 라우팅하고, 요청 타임아웃을 0.5초로 설정합니다.

(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# # kubectl 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
virtualservice.networking.istio.io/reviews configured
  • http timeout 0.5초 설정하지만, 응답 1초 걸리는 이유는, productpage 코드에 reviews 호출 시 timeout 되면 한번 더 재시도하게끔 하드 코딩되어 있음


🧿 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