Cloud Service Mesh の互換性について
ISTIOD コントロール プレーンの実装は非推奨になりました。互換性を評価し、フリート全体でブロッキング条件を解決して、サポート終了期限までにモダナイズする必要があります。
このガイドでは、構成、インフラストラクチャ、スケールが TRAFFIC_DIRECTOR コントロール プレーンの実装と互換性があることを確認して、コントロール プレーンのモダナイゼーションに対するフリートの互換性を評価する方法について詳しく説明します。
互換性チェックを有効または無効にする
互換性チェックを開始するには、フリートの検証モードを有効にします。これにより、すべての Istio 構成、インフラストラクチャ構成、スケール パラメータの継続的な監査がトリガーされます。これらのチェックを有効にしても、フリートやクラスタに変更は加えられません。互換性レポートのみが有効になります。
チェックを有効にする
互換性監査を開始するには、次の gcloud コマンドを実行します。
gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID
FLEET_PROJECT_ID は、フリートホスト プロジェクトの ID に置き換えます。通常、FLEET_PROJECT_ID はプロジェクトと同じ名前になります。
有効にすると、Cloud Service Mesh は、フリートと、フリート内の Cloud Service Mesh でプロビジョニングされたすべてのクラスタのモダナイゼーションの互換性の評価を開始します。
チェックを無効にする
互換性結果の報告を停止するには、次のコマンドを実行します。
gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID
このコマンドは、メンバーシップの状態からモダナイゼーションの互換性条件を削除し、個々の Istio CR から ModernizationCompatible ステータスを削除します。
互換性について理解する
モダナイゼーションの互換性は、フリートレベルとメンバーシップ(クラスタ)レベルの両方の条件を使用して報告されます。システムはさまざまなチェックを異なるタイミングで実行し、すべてのチェックが少なくとも 1 日に 1 回実行されます。チェックを有効にするか、修正を適用してから、ステータスが更新されるまで 1 日ほどかかることがあります。
これらの結果を表示するには、次のコマンドを使用して最新のメッシュ ステータスを取得します。
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
フリートレベルの互換性
state.servicemesh.conditions でフリートの全体的なモダナイゼーション ステータスを確認します。
フリートに互換性がある: フリートに互換性がある場合は、コード
MODERNIZATION_COMPATIBLEの条件が表示されます。name: projects/project_id/locations/global/features/servicemesh state: servicemesh: conditions: - code: MODERNIZATION_COMPATIBLE details: 'Fleet is eligible for modernization.' documentationLink: https://cloud.google.com/service-mesh/... severity: INFOフリートに互換性がない: フリートがモダナイゼーションに対応していない場合は、コード
MODERNIZATION_INCOMPATIBLEの条件が表示されます。name: projects/project_id/locations/global/features/servicemesh state: servicemesh: conditions: - code: MODERNIZATION_INCOMPATIBLE details: 'Fleet is not yet eligible for modernization.' documentationLink: https://cloud.google.com/service-mesh/... severity: INFOフリートに互換性がない場合は、特定のギャップの条件を確認します。
membershipStates.servicemeshで、追加のWARNINGまたはERRORの重大度のフリートレベルの条件とクラスタレベルの条件を確認し、ブロックを解決します。
クラスタレベルの互換性
フリート内の Cloud Service Mesh がプロビジョニングされた各クラスタの membershipStates.servicemesh で、WARNING または ERROR の重大度の条件を探します。互換性がない場合、出力は次のようになります。
membershipSpecs:
projects/project_id/locations/global/memberships/cluster-a:
mesh:
management:MANAGEMENT_AUTOMATIC
membershipStates:
projects/project_id/locations/global/memberships/cluster-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
- code: WORKLOAD_IDENTITY_REQUIRED
details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
documentationLink: https://cloud.google.com/...
severity: ERROR
...
各条件に記載されている documentationLink に沿って、特定の非互換性を理解して解決します。
互換性の問題を解決する
互換性のない Pod アノテーションを解決する
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION コードは、特定の Pod にサポートされていない、または無効な Istio アノテーションがあるため、クラスタを TRAFFIC_DIRECTOR コントロール プレーンにモダナイズできないことを示します。
メンバーシップに条件 MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION が設定された gcloud container fleet mesh describe コマンドの出力例:
membershipStates:
projects/project_id/locations/global/memberships/membership-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
これらの Pod アノテーションを解決するには:
問題のあるアノテーションを特定する: ステータス条件の
detailsフィールドをチェックして、サポートされていないアノテーション キーまたは無効なアノテーション キーを見つけます。問題のあるアノテーション キーを持つすべての Pod を検索します。修正と検証:
- Deployment または Pod の YAML 仕様を変更して、サポートされているアノテーションのみを使用するようにします(他のすべてのアノテーションはサポートされていません)。サポートされていないアノテーションを削除し、無効な値を修正して、更新された YAML をクラスタに再適用します。
- すべての Pod アノテーションが修正されると、そのメンバーシップに
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION条件が表示されなくなります。
互換性のない構成を解決する
MODERNIZATION_INCOMPATIBLE_CONFIG コードは、構成に互換性がないため、クラスタを TRAFFIC_DIRECTOR コントロール プレーンにモダナイズできないことを示します。これらの非互換性は、次の原因で発生する可能性があります。
- サポートされていない機能やフィールドを使用している、または無効な値を含む特定の Istio カスタム リソース(CR)。
- Istio MeshConfig の設定が無効またはサポートされていません。
- スケーラビリティの上限を超えている。
- サポートされていないサービスまたは Namespace アノテーションの使用。
メンバーシップに条件 MODERNIZATION_INCOMPATIBLE_CONFIG が設定された gcloud container fleet mesh describe コマンドの出力例:
membershipSpecs:
projects/project_id/locations/global/memberships/membership-a:
mesh:
management:MANAGEMENT_AUTOMATIC
membershipStates:
projects/project_id/locations/global/memberships/membership-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_CONFIG
details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
これらの構成を解決するには、次の操作を行います。
条件の詳細を分析する: ステータス条件の
detailsフィールドを確認します。個々のエラーを要約し、構成の問題があるリソースタイプを特定します。提供された詳細の例では、スケールと MeshConfig の問題に対処し、GatewayリソースとServiceEntryリソースのエラーを検査する必要があります。互換性のないリソースを特定して調査する: 次のサンプル スクリプトを使用して、互換性チェックに失敗した Istio カスタム リソース(CR)を一覧表示します。このスクリプトは例として提供されています。クラスタで実行する前に、環境と運用要件を満たしていることを確認してください。このスクリプトを実行するには、
kubectlとjqがインストールされている必要があります。出力には、各リソースのstatus.conditions(タイプ:ModernizationCompatible、ステータス:"False")に記載されている特定のエラーの詳細が含まれます。for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do echo "--- Checking $resource ---" kubectl get $resource --all-namespaces -o json | \ jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}' done出力例:
--- Checking serviceentries --- { "kind": "ServiceEntry", "name": "demo-service-entry", "namespace": "se", "message": [ "WARNING: unsupported resolution type: DNS_ROUND_ROBIN" ] } .. --- Checking workloadentries --- { "kind": "WorkloadEntry", "name": "demo-we", "namespace": "default", "message": [ "WARNING: This API is not supported" ] }構成を修正して適用する: サポートされていないフィールドを削除するか、無効な値を互換性のある値に置き換えて、YAML を変更します。サポートが必要な場合は、マネージド Cloud Service Mesh でサポートされている機能とマネージド Cloud Service Mesh の API サポートのドキュメントをご覧ください。(たとえば、提供された例では、
ServiceEntryの解像度をDNS_ROUND_ROBINからDNSに更新します)。修正を確認する: 修正を適用した後、定期的なチェックでステータスが更新されるまで、最長で 24 時間かかります。
固定リソースの
ModernizationCompatible条件が status:"True"に変更されます。次のコマンドを使用して、リソースのステータスを確認します。kubectl get resource name -n namespace -o yaml出力例:
status: conditions: - lastTransitionTime: "2026-06-05T06:12:52.219963391Z" message: Resource is compatible for modernization reason: Compatible status: "True" type: ModernizationCompatiblegcloud container fleet mesh describeコマンドを再実行します。関連する問題がすべて解決されると、そのメンバーシップにMODERNIZATION_INCOMPATIBLE_CONFIG条件は表示されなくなります。
互換性のないフリート スケールを解決する
MODERNIZATION_INCOMPATIBLE_FLEET_SCALE コードは、フリート全体のリソースのスケールがモダナイゼーションでサポートされている上限を超えているため、フリートを TRAFFIC_DIRECTOR コントロール プレーンにモダナイズできないことを示します。
このフェーズでは、次の制限付きでフリートのモダナイゼーションをサポートします。
- フリート全体で最大 1,500 個のデータプレーン エンドポイント(プロキシ)。
- フリート全体で最大 200 個の Cloud Service Mesh サービス。