マネージド 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カスタム リソースは適用されなくなります。トラフィックを制限するには、KubernetesNetworkPolicyリソースまたはアプリケーション レベルの認証と認可を構成する必要があります。
オブザーバビリティ
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 のすべてのコンポーネントをアンインストールします。
アプリケーション トラフィックが中断されないようにするには:
- STRICT mTLS ポリシーを PERMISSIVE にダウングレードします。
- トラフィックをブロックする可能性のある AuthorizationPolicy をすべて削除します。
アンインストールするクラスタでエンドポイント検出を実行している他のクラスタがある場合は、マルチクラスタを無効にします。
kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'クリーンアップが必要なシークレットを見つけて削除します。
kubectl get secrets -n istio-system -l istio/multiCluster=truekubectl delete secret SECRET_NAMEここで、SECRET_NAME は Secret の名前です。一覧表示されているシークレットごとに、この手順を繰り返します。
名前空間でサイドカーの自動挿入機能が有効になっている場合は、これを無効にします。次のコマンドを実行して、名前空間ラベルを表示します。
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ラベルが表示されていない場合、Namespace で自動挿入が有効になっていません。
サイドカーが挿入されたワークロードを再起動してプロキシを削除します。
プロキシがマネージド コントロール プレーンに接続されていないことを確認します。
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)" 'メッシュ機能のメンバーシップ仕様の管理を
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)。
メッシュ機能のメンバーシップ状態がコントロール プレーンのステータス
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の場合は、数分後に再度確認します。- コントロール プレーンの状態が
STALLEDの場合、内部エラーのため、アンインストールは動作がブロックされます。問題が解決しない場合は、サポートにお問い合わせください。
- コントロール プレーンの状態が
必要に応じて、Istio CR、Istio CRD、istio-(revision) configmap、asm-options configmap、
istio-systemNamespace を削除して、クラスタからサービス メッシュを削除するか、別の Istio API 互換サービス メッシュで使用します。Istio CR を削除します。
kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespacesIstio CRD を削除します。
kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl deleteistio-(リビジョン) configmap を削除します。
istio-systemNamespace を削除する場合は、この手順をスキップできます。kubectl delete configmap istio-RELEASE_CHANNEL -n istio-systemRELEASE_CHANNEL は、リリース チャンネル(
asm-managed、asm-managed-stable、asm-managed-rapid)に置き換えます。asm-options configmap を削除します。
kubectl delete configmap asm-options -n istio-systemistio-systemNamespace を削除します。kubectl delete namespace istio-system --ignore-not-found=true削除が成功したかどうかを確認します。
kubectl get ns次のように、
Terminating状態を示す出力が返されます。出力されない場合は、Namespace 内の残りのリソースを手動で削除して、もう一度試してください。NAME STATUS AGE istio-system Terminating 71m
Certificate Authority Service を使用している場合は、マネージド Cloud Service Mesh の Certificate Authority Service の構成で作成した権限と CA プールをクリーンアップします。
マネージド Cloud Service Mesh のフリートのデフォルト構成を有効にしていて、将来のクラスタで無効にする場合は、無効にします。単一クラスタからのアンインストールのみを行う場合は、この手順をスキップできます。
gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_IDここで、FLEET_PROJECT_ID はフリート ホスト プロジェクトの ID です。
フリートレベルで Cloud Service Mesh の使用を停止する場合は、フリート ホスト プロジェクトのサービス メッシュ機能を無効にします。
gcloud container hub mesh disable --project FLEET_PROJECT_IDここで、FLEET_PROJECT_ID はフリート ホスト プロジェクトの ID です。
これらの手順を完了すると、プロキシ、認証局、RBAC のロールとバインディングを含むすべての Cloud Service Mesh コンポーネントが、クラスタから体系的に削除されます。インストール プロセス中に、Google 所有のサービス アカウントに、クラスタ内のサービス メッシュ リソースを確立するために必要な権限が付与されます。これらのアンインストール手順を実行しても、これらの権限は取り消されないため、今後 Cloud Service Mesh をシームレスに再有効化できます。