Cloud Service Mesh 제거

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

다음 안내에 따라 Cloud Service Mesh를 제거하면 컨트롤 플레인 유형 (클러스터 내 또는 관리형)에 관계없이 모든 구성이 삭제됩니다. 클러스터 내에서 관리형으로 이전하는 경우 이전 가이드를 따르세요.

Cloud Service Mesh 제거

다음 명령어를 사용하여 모든 Cloud Service Mesh 구성요소를 제거합니다. 이러한 명령어는 적용한 CRD를 포함하여 istio-system 네임스페이스와 모든 커스텀 리소스 정의(CRD)도 삭제합니다.

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

    • STRICT mTLS 정책을 PERMISSIVE로 다운그레이드합니다.
    • 트래픽을 차단할 수 있는 AuthorizationPolicy를 삭제합니다.
  2. 이 클러스터에서 자동 관리를 사용 중지합니다(직접 사용하거나 Fleet 기본 구성 사용).

      gcloud container fleet mesh update \
         --management manual \
         --memberships MEMBERSHIP_NAME \
         --project FLEET_PROJECT_ID \
         --location MEMBERSHIP_LOCATION
    

    다음을 바꿉니다.

    • MEMBERSHIP_NAME은 클러스터가 Fleet에 등록되었는지 확인할 때 나열되는 멤버십 이름입니다.
    • MEMBERSHIP_LOCATION은 멤버십 위치입니다(리전 또는 global).
  3. 네임스페이스의 사이드카 자동 삽입을 중지합니다(사용 설정된 경우). 다음 명령어를 실행하여 네임스페이스 라벨을 표시합니다.

     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 라벨이 표시되지 않으면 네임스페이스에서 자동 삽입이 사용 설정되지 않은 것입니다.

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

  5. 관리형 Cloud Service Mesh를 사용하는 경우 클러스터에 있는 컨트롤 플레인 구현을 확인합니다. 이렇게 하면 다음 단계에서 관련 리소스를 삭제하는 데 도움이 됩니다.

  6. 관리형 Cloud Service Mesh를 사용하는 경우 클러스터에서 모든 controlplanerevision 리소스를 삭제합니다.

    kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
    
  7. 클러스터에 웹훅이 있는 경우 삭제합니다.

    클러스터 내 Cloud Service Mesh

    validatingwebhooksconfigurationmutatingwebhookconfiguration을 삭제합니다.

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    

    관리형 Cloud Service Mesh

    A. validatingwebhooksconfiguration을 삭제합니다.

    kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
    

    B. 모든 mutatingwebhookconfiguration을 삭제합니다.

    kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
    
  8. 모든 워크로드가 시작되고 프록시가 관찰되지 않으면 클러스터 내 컨트롤 플레인을 안전하게 삭제하여 청구를 중단할 수 있습니다.

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

    istioctl uninstall --purge
    

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

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

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

     kubectl get ns
    

    출력에 Terminating 상태가 표시되고 표시된 대로 반환해야 합니다. 그렇지 않으면 네임스페이스의 나머지 리소스를 수동으로 삭제하고 다시 시도해야 할 수 있습니다.

     NAME                 STATUS       AGE
     istio-system         Terminating  71m
     asm-system           Terminating  71m
    
  11. 클러스터를 삭제할 예정이거나 이미 삭제한 경우 각 클러스터가 Fleet에서 등록 취소되었는지 확인합니다.

  12. 관리형 Cloud Service Mesh Fleet 기본 구성을 사용 설정했고 이후 클러스터에서 사용 중지하려면 이를 사용 중지합니다. 단일 클러스터에서만 제거하는 경우 이 단계를 건너뛸 수 있습니다.

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

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

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

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

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

  14. 관리형 Cloud Service Mesh를 사용 설정한 경우 관리 리소스가 있는지 확인하고 있는 경우 삭제합니다.

    1. mdp-controller 배포를 삭제합니다.

        kubectl delete deployment mdp-controller -n kube-system
      
    2. TRAFFIC_DIRECTOR 컨트롤 플레인 구현이 있는 경우 투명 상태 점검 리소스를 삭제합니다. 일반적으로 이러한 항목은 자동으로 삭제되지만 다음 단계에 따라 삭제할 수도 있습니다.

      1. snk daemonset를 삭제합니다.

           kubectl delete daemonset snk -n kube-system
        
      2. 방화벽 규칙을 삭제합니다.

           gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
        

        다음을 바꿉니다.

        • FIRST_8_CHARS_OF_CLUSTER_ID는 특정 클러스터의 클러스터 ID의 처음 8자입니다.
    3. istio-cni-plugin-config 구성 맵이 있는지 확인합니다.

        kubectl get configmap istio-cni-plugin-config -n kube-system
      

      istio-cni-plugin-config 구성 맵이 있으면 삭제합니다.

        kubectl delete configmap istio-cni-plugin-config -n kube-system
      
    4. istio-cni-node daemonset를 삭제합니다.

        kubectl delete daemonset istio-cni-node -n kube-system
      
  15. 관리형 Cloud Service Mesh를 제거하는 경우 지원팀에 문의하여 모든 Google Cloud 리소스가 삭제되었는지 확인하세요. 이 단계를 따르지 않으면 istio-system 네임스페이스 및 구성 맵도 계속 다시 만들어질 수 있습니다.

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