マネージド Cloud Service Mesh をアンインストールする

このページでは、マネージド Cloud Service Mesh をアンインストールする方法について説明します。クラスタ内 Cloud Service Mesh をアンインストールする場合は、 クラスタ内の アンインストール ガイドに従ってください。

複数のコントロール プレーンがプロビジョニングされたレガシー設定を使用している場合は、次の手順に沿ってプロビジョニングされたすべてのコントロール プレーンを削除します。

asmcli で管理されるコントロール プレーンはアンインストール対象外ですが、asmcli --managed または Mesh 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. Mesh 機能メンバーシップ仕様の管理を not-installed に更新します。

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

    次のように置き換えます。

    • MEMBERSHIP_NAME は、クラスタがフリートに登録されていることを確認した際に表示されるメンバーシップ名です。
    • MEMBERSHIP_LOCATION は、メンバーシップのロケーションです( リージョンまたは global)。
  8. コントロール プレーンの状態の Mesh 機能メンバーシップの状態が 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 Namespace を削除して、クラスタからサービス メッシュを削除するか、別の 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 Namespace を削除する場合は、この手順をスキップできます。

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      RELEASE_CHANNEL は、リリース チャンネル (asm-managedasm-managed-stableasm-managed-rapid)に置き換えます。

    4. asm-options configmap を削除します。

      kubectl delete configmap asm-options -n istio-system
      
    5. istio-system Namespace を削除します。

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. 削除が成功したかどうかを確認します。

      kubectl get ns
      

      次のように、Terminating 状態を示す出力が返されるはずです。そうでない場合は、名前空間内の残りのリソースを手動で削除して、もう一度試してください。

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Certificate Authority Service を使用している場合は、マネージド Cloud Service Mesh 用に Certificate Authority Service を構成するときに作成した権限と CA プール をクリーンアップします

  11. マネージド Cloud Service Mesh のフリートのデフォルト構成を有効にしていて、将来のクラスタで無効にする場合は、無効にします。単一のクラスタからのみアンインストールする場合は、この手順をスキップできます。

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

    ここで、FLEET_PROJECT_ID はフリート ホスト プロジェクトの ID です。

  12. フリートレベルで Cloud Service Mesh の使用を停止する場合は、フリート ホスト プロジェクトのサービス メッシュ機能を無効にします。

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    ここで、FLEET_PROJECT_ID はフリート ホスト プロジェクトの ID です。

これらの手順を完了すると、プロキシ、認証局、RBAC のロールとバインディングを含むすべての Cloud Service Mesh コンポーネントが、クラスタから体系的に削除されます。インストール プロセス中に、Google 所有のサービス アカウントに、クラスタ内のサービス メッシュ リソースを確立するために必要な権限が付与されます。これらのアンインストール手順を実行しても、これらの権限は取り消されないため、今後 Cloud Service Mesh をシームレスに再有効化できます。