ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Istio Header based routing를 이용한 Dark Release
    K8S 2021. 6. 25. 01:33

    이번 포스팅은 이스티오만의 배포방식인 dark release에 대해서 다룬다.

     

     

    dark release란 개발자가 새로운 버전의 어플리케이션 개발시 test서버에서 testing을 거치지 않고 

    바로 Production Level에서 testing을 할 수 있는 어플리케이션 배포 방식으로 

    특정 사용자만 새로운 버전의 애플리케이션 서비스를 경험 및 테스트할 수 있다. 

     

    어떻게 특정 사용자만 새로운 버전의 애플리케이션을 사용할 수 있을까?

     

    이는 이전 포스팅에서 다룬 header based routing를 이용한다. 

     

     

    Istio Ingress Gateway 정리2 (Prefix based routing, Header based routing)

    Istio Ingress gateway 정리 k8s의 Ingress는 클러스터 외부에서 접근하고 트래픽을 원하는 서비스로 보낼 수 있는 오브젝트다. 그리고 이스티오 서비스 매쉬에서도 ingress gateway라는 모델을 제공하는데

    seungjuitmemo.tistory.com

     

     

     

    따라서 저번 포스팅에서 사용했던 virtual service와 Destination rule도 거의 그대로 사용한다. 

     

    참고로 save 버전은 이미지 대신 place holder만 경우,

    risky 버전은 이미지가 있는 경우다. 

     

    <virtual service, destination rule >

    kind: VirtualService
    apiVersion: networking.istio.io/v1alpha3
    metadata:
      name: fleetman-staff-service
      namespace: default
    spec:
      hosts:
        - fleetman-staff-service
      http:
        - match:
            - headers:  # x-my-header=canary일때 subset risky인 포드로 라우팅
                x-my-header:
                  exact: canary
          route:
            - destination:
                host: fleetman-staff-service
                subset: risky
        - route:  # 위에서 필터링되지 않은 경로는 subset safe인 포드로 라우팅 
            - destination:
                host: fleetman-staff-service
                subset: safe
    ---
    kind: DestinationRule
    apiVersion: networking.istio.io/v1alpha3
    metadata:
      name: fleetman-staff-service
      namespace: default
    spec:
      host: fleetman-staff-service
      subsets:
        - labels:
            version: safe
          name: safe
        - labels:
            version: risky
          name: risky
    

     

    match 속성의 header 값을 이용하여 헤더와 매칭되는 경우 원하는 경우로 라우팅한다. 

     

    좀 더 자세히 말하자면, 접속한 사용자의 헤더가 x-my-header=canary 키 값을 갖는 경우, risky 버전

    즉 새로운 버전의 포드로 라우팅한다. 

     

    반면, 일반 사용자는 저 헤더값이 없으므로 risky 버전의 staff-service에 도달하지 못한다.  

     

     

     

     

    다음은 프론트엔드에서 특정 헤더값이 없는 일반 사용자로 접속했을 때의 브라우저 화면이다.

     

     safe버전으로만 라우팅되기 때문에 place holder만 나타난다. 

     

     

     

     

    이번에는 직접 header값을 설정하여 접근해본다. 

     

    Google extension의 ModHeader를 이용하면 다음과 같이 헤더값을 설정할 수 있다. 

     

     

     

     

    위 헤더값으로 프론트엔드로 접속했을 때 save 버전의 placeholder 대신

    risky버전의 이미지가 나타는 것을 볼 수 있다. 

     

     

     

     

    즉 header based routing을 이용하면 일반 사용자가 접속하지 못했던 환경을 경험할 수 있고, 

    이를 dark release라 한다. 

     

    은밀하게 production 환경에서 테스팅한다는 점에서 dark release라는 이름은 잘 지은 것 같다. 

    반응형

    댓글

Designed by Tistory.