マネージド 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 をアンインストールする前に、クラスタとワークロードから削除される機能について検討してください。ワークロードから Cloud Service Mesh プロキシを削除して再起動すると、アプリケーションは標準の Kubernetes ネットワーキング動作に戻ります。

セキュリティ

Cloud Service Mesh を削除すると、次のセキュリティ機能が失われます。

  • 相互 TLS(mTLS)暗号化: サービス間のトラフィックは、メッシュで管理される mTLS 証明書を使用して転送中に暗号化されなくなります。
  • 認可ポリシー: Mesh AuthorizationPolicy カスタム リソースは適用されなくなります。トラフィックを制限するには、Kubernetes NetworkPolicy リソースまたはアプリケーション レベルの認証と認可を構成する必要があります。

オブザーバビリティ

Cloud Service Mesh を削除すると、次のオブザーバビリティ機能が失われます。

  • テレメトリーと指標: レイヤ 7 の指標(リクエスト率、エラー率、レイテンシなど)の自動収集が停止します。メッシュ テレメトリーは、Cloud Monitoring に自動的に取り込まれなくなりました。標準の GKE 指標は影響を受けません。
  • ダッシュボードと SLO:Google Cloud コンソールで事前構成された Cloud Service Mesh ダッシュボードとサービスレベル目標(SLO)のモニタリングは、データが入力されなくなります。
  • アクセス ロギングとトレース: クライアント mTLS ID と自動化された分散トレースを含むサイドカー プロキシ アクセスログは生成されなくなります。

サービス ディスカバリとネットワーキングの復元性

Cloud Service Mesh を削除すると、次のネットワーキング機能と復元機能が失われます。

  • ネットワークの復元力: ワークロードは、自動再試行、構成可能なリクエスト タイムアウト、サーキット ブレーカー、外れ値検出、接続プール管理などのサイドカーレベルの復元力機能を失います。アプリケーションは、接続の失敗と再試行を直接管理する必要があります。
  • マルチクラスタ サービス ディスカバリ: フリート内の複数のクラスタにまたがるクラスタ間のエンドポイント検出とルーティングが、メッシュを介して機能しなくなります。サービスは、標準 DNS を使用してローカル クラスタ内のエンドポイントのみを検出できます。

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 は Secret の名前です。一覧表示されているシークレットごとに、この手順を繰り返します。

  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 ラベルが表示されていない場合、Namespace で自動挿入が有効になっていません。

  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 は、クラスタがフリートに登録されていることを確認した際に表示されるメンバーシップ名です。
    • 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 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-(リビジョン) configmap を削除します。istio-system Namespace を削除する場合は、この手順をスキップできます。

      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 Namespace を削除します。

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

      kubectl get ns
      

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

      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 をシームレスに再有効化できます。