관리형 Cloud Service Mesh 제거

이 페이지에서는 관리형 Cloud Service Mesh를 제거하는 방법을 설명합니다. 클러스터 내 Cloud Service Mesh를 제거하는 경우 클러스터 내 제거 가이드를 대신 따르세요.

프로비저닝된 여러 제어 영역이 있는 기존 설정을 사용하는 경우 이 안내를 따르면 프로비저닝된 모든 제어 영역이 삭제됩니다.

asmcli에서 관리하는 제어 영역은 제거를 지원하지 않지만 asmcli --managed 또는 메시 API 관리 제어 영역이 있는 클러스터는 지원됩니다. 컨트롤 플레인이 확실하지 않은 경우 다음 명령어를 실행합니다.

kubectl get controlplanerevisions -n istio-system -l 'app.kubernetes.io/created-by!=asmcli'

출력에 나열된 항목이 있으면 제거가 지원됩니다.

Cloud Service Mesh 제거

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

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

    • STRICT mTLS 정책을 PERMISSIVE로 다운그레이드합니다.
    • 트래픽을 차단할 수 있는 AuthorizationPolicy를 삭제합니다.
  2. 제거 중인 클러스터에서 엔드포인트 검색을 실행하는 다른 클러스터가 있는 경우 멀티 클러스터를 사용 중지합니다.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. 삭제해야 할 보안 비밀을 찾은 후 삭제합니다.

    kubectl get secrets -n istio-system -l istio/multiCluster=true
    
    kubectl delete secret SECRET_NAME
    

    여기서 SECRET_NAME은 보안 비밀의 이름입니다. 나열된 각 보안 비밀에 대해 이 단계를 반복합니다.

  4. 네임스페이스의 사이드카 자동 삽입을 중지합니다(사용 설정된 경우). 다음 명령어를 실행하여 네임스페이스 라벨을 표시합니다.

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

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

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

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

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. LABELS 열의 출력에 istio-injection이 표시되면 삭제합니다.

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

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

  6. 관리형 컨트롤 플레인에 연결된 프록시가 없는지 확인합니다.

      kubectl get pods --all-namespaces -o json | jq -r '
      .items[] |
      select(
         .spec.containers[].env[]? |
         select(.name == "PROXY_CONFIG" and (.value | contains("\"discoveryAddress\":\"meshconfig.googleapis.com:443\"")))
      ) |
      "\(.metadata.namespace)\t\(.metadata.name)"
      '
    
  7. 메시 기능 멤버십 사양 관리를 not-installed로 업데이트합니다.

     gcloud alpha container fleet mesh update \
       --project FLEET_PROJECT_ID \
       --memberships MEMBERSHIP_NAME \
       --location MEMBERSHIP_LOCATION \
       --management not-installed
    

    다음을 바꿉니다.

    • MEMBERSHIP_NAME은 클러스터가 Fleet에 등록되었는지 확인할 때 나열되는 멤버십 이름입니다.
    • MEMBERSHIP_LOCATION은 멤버십 위치입니다 (리전 또는 global).
  8. 제어 영역 상태의 메시 기능 멤버십 상태가 DISABLED인지 확인합니다.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

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

     servicemesh:
       controlPlaneManagement:
         details:
         - code: DISABLED
           details: Control Plane Management is not enabled.
         state: DISABLED
       dataPlaneManagement:
         details:
         - code: DISABLED
           details: Data Plane Management is not enabled.
         state: DISABLED
     state:
       description: 'Please see https://cloud.google.com/service-mesh/docs/install for instructions to onboard to Anthos Service Mesh.'
    ...
    

    컨트롤 플레인 상태가 DEPROVISIONING이면 몇 분 후에 다시 확인합니다.

    1. 컨트롤 플레인 상태가 STALLED이면 내부 오류 조건으로 인해 제거가 작동하지 못하도록 차단됩니다. 문제가 계속되면 지원팀에 문의하세요.
  9. 선택적으로 Istio CR, Istio CRD, istio-(revision) configmap, asm-options configmap, istio-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을 출시 채널 (asm-managed, asm-managed-stable, 또는 asm-managed-rapid)로 바꿉니다.

    4. asm-options configmap 삭제:

      kubectl delete configmap asm-options -n istio-system
      
    5. istio-system 네임스페이스 삭제:

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

      kubectl get ns
      

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

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. 클러스터에서 관리형 CNI가 사용 설정된 경우(최신 설치의 기본값) CNI 리소스를 정리합니다.

    • 표준 클러스터: istio-cni-plugin-config ConfigMap을 확인하고 삭제합니다.

      1. istio-cni-plugin-config ConfigMap이 있는지 확인합니다.

           kubectl get configmap istio-cni-plugin-config -n kube-system
        
      2. 있는 경우 istio-cni-plugin-config ConfigMap을 삭제합니다.

           kubectl delete configmap istio-cni-plugin-config -n kube-system
        
    • Autopilot 클러스터: GKE Autopilot은 kube-system 네임스페이스의 리소스 수정을 제한합니다. 관리형 Cloud Service Mesh를 제거한 후 Autopilot 클러스터를 유지하는 경우 지원팀에 문의하여 지원팀에서 istio-cni-plugin-config ConfigMap을 kube-system에서 삭제하도록 합니다.

  11. Certificate Authority Service를 사용하는 경우 관리형 Cloud Service Mesh용 Certificate Authority Service를 구성하는 동안 생성된 권한 및 CA 풀 을 정리합니다.

  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입니다.

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