Cloud Service Mesh をアンインストールします。

このページでは、Istio API を使用している場合に Cloud Service Mesh をアンインストールする方法について説明します。Compute Engine API を使用している場合は、手順は必要ありません。違いについては、Cloud Service Mesh の概要をご覧ください。

以下の手順で Cloud Service Mesh をアンインストールすると、コントロール プレーンの種類(クラスタ内またはマネージド)に関係なく、すべての構成が削除されます。クラスタ内からマネージドに移行する場合は、移行ガイドをご覧ください。

Cloud Service Mesh をアンインストールする

以下のコマンドを使用して、Cloud Service Mesh のすべてのコンポーネントをアンインストールします。また、これらのコマンドでは、istio-system 名前空間と、すべてのカスタム リソース定義(CRD)(お客様が適用した CRD も含む)が削除されます。

  1. アプリケーション トラフィックが中断されないようにするには:

    • STRICT mTLS ポリシーを PERMISSIVE にダウングレードします。
    • トラフィックをブロックする可能性のある AuthorizationPolicy をすべて削除します。
  2. 次のコマンドで、このクラスタで自動管理を無効にします(直接適用したか、フリートのデフォルト構成を使用して適用したかに関わらず)。

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

    以下を置き換えます。

    • MEMBERSHIP_NAME は、クラスタがフリートに登録されていることを確認した際に表示されたメンバーシップ名です。
    • 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. クラスタ内に Webhook が存在する場合は、それを削除します。

    クラスタ内 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. クラスタを削除する場合、またはすでに削除している場合は、各クラスタがフリートから登録解除されていることを確認してください。

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

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

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

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

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    ここで、FLEET_PROJECT_ID はフリート ホスト プロジェクトの 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 configmap が存在するかどうかを確認します。

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

      istio-cni-plugin-config configmap が存在する場合は削除します。

        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 Namespace と構成マップが引き続き再作成されることもあります。

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