Ssoon

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

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

[7주차] Service Mesh : Traffic Management : Traffic Shifting

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

Traffic Shifting

특정 조건에 따라 클라이언트의 요청을 다른 서비스 버전 또는 인스턴스로 전달하는 기술입니다. 

  • 새로운 버전의 서비스 테스트 (예: A/B 테스트)
  • 점진적 배포 (예: Canary 배포)
  • 장애 발생 시 트래픽 재라우팅

🧿 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: 이 VirtualService의 세부 설정입니다.
    • hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. reviews라는 이름의 서비스에 대해 요청을 처리합니다.
  • http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
    • route: 클라이언트의 요청을 어떤 서비스로 전달할지를 정의합니다.
      • destination: 요청이 전달될 서비스의 정보를 정의합니다.
        • host: 요청을 받을 서비스의 이름, 여기서는 reviews입니다.
        • subset: 요청이 전달될 서비스의 특정 서브셋(버전)을 정의합니다. 여기서는 v1과 v3로 설정되어 있습니다.
        • weight: 각 서브셋으로 전달할 트래픽의 비율을 설정합니다. 여기서는 두 서브셋(v1과 v3)에 각각 50%의 트래픽이 할당됩니다.

VirtualService 정의는 클라이언트의 HTTP 요청을 reviews 서비스의 v1과 v3 서브셋으로 각각 50%의 비율로 라우팅합니다.

(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# cat virtual-service-reviews-50-v3.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f virtual-service-reviews-50-v3.yaml
virtualservice.networking.istio.io/reviews configured


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

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

VirtualService 정의는 클라이언트의 HTTP 요청을 reviews 서비스의 v1 서브셋으로 80%의 비율로, v2 서브셋으로 20%의 비율로 라우팅합니다

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


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

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

VirtualService 정의는 클라이언트의 HTTP 요청을 reviews 서비스의 v1 서브셋으로 90%의 비율로, v2 서브셋으로 10%의 비율로 라우팅합니다.

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

 


🧿 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