클러스터 내 Cloud Service Mesh 제거

이 페이지에서는 Istio API를 사용하는 경우 클러스터 내 Cloud Service Mesh를 제거하는 방법을 설명합니다. Compute Engine API를 사용하는 경우 별도의 단계가 필요하지 않습니다. 차이점을 알아보려면 Cloud Service Mesh 개요 를 참고하세요.

다음 안내에 따라 클러스터 내 Cloud Service Mesh를 제거하면 모든 구성이 삭제됩니다.

관리형 Cloud Service Mesh를 제거하는 경우 관리형 제거 가이드를 따르세요.

클러스터 내에서 관리형으로 이전하는 경우 이전 가이드 를 따르세요.

Cloud Service Mesh 제거

다음 명령어를 사용하여 모든 Cloud Service Mesh 구성요소를 제거합니다.

  1. 애플리케이션 트래픽이 중단되지 않도록 하려면 다음 안내를 따르세요.

    • STRICT mTLS 정책을 PERMISSIVE로 다운그레이드합니다.
    • 트래픽을 차단할 수 있는 AuthorizationPolicy를 삭제합니다.
  2. 네임스페이스의 사이드카 자동 삽입을 중지합니다(사용 설정된 경우). 다음 명령어를 실행하여 네임스페이스 라벨을 표시합니다.

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    출력은 다음과 비슷합니다.

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    LABELS 열 아래의 출력에 istio.io/rev=이 표시되면 삭제합니다.

     kubectl label namespace YOUR_NAMESPACE istio.io/rev-
    

    LABELS 열 아래의 출력에 istio-injection이 표시되면 삭제합니다.

     kubectl label namespace YOUR_NAMESPACE istio-injection-
    

    istio.io/rev 또는 istio-injection 라벨이 표시되지 않으면 네임스페이스에서 자동 삽입이 사용 설정되지 않은 것입니다.

  3. 사이드카가 삽입된 워크로드를 다시 시작하여 프록시를 삭제합니다.

  4. 클러스터에 validatingwebhooksconfigurationmutatingwebhookconfiguration이 있는 경우 삭제합니다.

      kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    
  5. 모든 워크로드가 시작되고 프록시가 관찰되지 않으면 클러스터 내 컨트롤 플레인을 안전하게 삭제하여 청구를 중단할 수 있습니다.

    클러스터 내 컨트롤 플레인을 삭제하려면 다음 명령어를 실행합니다.

    istioctl uninstall --purge
    

    다른 컨트롤 플레인이 없으면 istio-system 네임스페이스를 삭제하여 모든 Cloud Service Mesh 리소스를 삭제할 수 있습니다. 그렇지 않으면 Cloud Service Mesh 버전에 해당하는 서비스를 삭제합니다. 이렇게 하면 CRD와 같은 공유 리소스를 삭제할 수 없습니다.

  6. 선택적으로 Istio CR, Isto CRD, istio-(revision) configmap, asm-options configmap, istio-system, asm-system 네임스페이스를 삭제하여 클러스터에서 서비스 메시를 삭제하거나 다른 Istio API 호환 서비스 메시에서 사용할 수 있습니다.

    1. Istio CR을 삭제합니다.

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. Istio CRD를 삭제합니다.

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. istio-(revision) configmap을 삭제합니다. istio-system 네임스페이스를 삭제하는 경우 이 단계를 건너뛸 수 있습니다.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      RELEASE_CHANNEL을 출시 채널로 바꿉니다.

    4. istio-system 네임스페이스를 삭제합니다.

      kubectl delete namespace istio-system --ignore-not-found=true
      
    5. asm-system 네임스페이스를 삭제합니다.

      kubectl delete namespace asm-system --ignore-not-found=true
      
      1. 삭제되었는지 확인합니다.

         kubectl get ns
         ```
        
        The output should indicate a `Terminating` state and return as shown,
        otherwise you might have to manually delete any remaining resources in
        the namespaces and try again.
        
        ```sh
         NAME                 STATUS       AGE
         istio-system         Terminating  71m
         asm-system           Terminating  71m
         ```
        
  7. 클러스터를 삭제할 예정이거나 이미 삭제한 경우 각 클러스터가 Fleet에서 등록 취소되었는지 확인합니다.

  8. Fleet 수준에서 Cloud Service Mesh 사용을 중지하려면 Fleet 호스트 프로젝트에서 서비스 메시 기능을 사용 중지합니다.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    여기서 FLEET_PROJECT_ID는 Fleet 호스트 프로젝트의 ID입니다.

이 단계를 완료하면 프록시, 클러스터 내 인증 기관, RBAC 역할 및 바인딩을 포함한 모든 Cloud Service Mesh 구성요소가 클러스터에서 체계적으로 삭제됩니다. 설치 프로세스 중 클러스터 내에서 서비스 메시 리소스를 설정하는 데 필요한 권한이 Google 소유 서비스 계정에 부여됩니다. 이러한 삭제 안내는 이러한 권한을 취소하지 않으며 이후에 Cloud Service Mesh를 다시 쉽게 활성화할 수 있게 해줍니다.