Cloud Service Mesh の互換性について

このガイドでは、フリートの構成、インフラストラクチャ、スケールが 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

クラスタレベルの互換性

フリート内の 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 アノテーションを解決するには:

  1. 問題のあるアノテーションを特定する: ステータス 条件の details フィールドを確認して、サポートされていないアノテーション キーまたは無効なアノテーション キーを見つけます。問題のあるアノテーション キーを持つすべての Pod を見つけます。

  2. 修正して確認する:

    1. Deployment または Pod の YAML 仕様を変更して、特定のアノテーションを削除または 変更し、サポートされていないアノテーションが含まれていないことを確認します。 サポートされていないアノテーション。 更新した YAML をクラスタに再適用します。
    2. すべての Pod アノテーションが修正されると、そのメンバーシップに対して MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION 条件が表示されなくなります。

互換性のない構成を解決する

MODERNIZATION_INCOMPATIBLE_CONFIG コードは、互換性のない構成が原因で、クラスタを TRAFFIC_DIRECTOR コントロール プレーンにモダナイズできないことを示します。これらの非互換性は、次の原因で発生する可能性があります。

  • サポートされていない機能やフィールドを使用している、または無効な値を含む特定の Istio カスタム リソース(CR)。
  • 無効またはサポートされていない Istio MeshConfig 設定。
  • スケーラビリティの上限を超えている。
  • サポートされていないサービスまたは名前空間のアノテーションを使用している。

メンバーシップに条件 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

これらの構成を解決するには:

  1. 条件の詳細を分析する: ステータス 条件の details フィールドを確認します。個々のエラーがまとめられ、構成に問題があるリソースタイプが特定されます。提供されている詳細の例では、スケールと MeshConfig の問題に対処し、Gateway リソースと ServiceEntry リソースのエラーを検査する必要があります。

  2. 互換性のないリソースを特定して調査する: 次の スクリプトを使用して、互換性チェックに失敗したすべての Istio カスタム リソース(CR)を一覧表示します。このスクリプトでは、kubectljq がインストールされている必要があります。 出力には、各リソースの status.conditions(type: ModernizationCompatible、status: "False") にある特定のエラーの詳細が含まれます。

    for resource in authorizationpolicies destinationrules gateways proxyconfigs peerauthentications 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"
      ]
    }
    
  3. 構成を修正して適用する: サポートされていないフィールドを削除するか、無効な値を互換性のある値に置き換えて、YAML を変更します。詳細については、 マネージド Cloud Service Mesh の サポートされている機能サポートされていない Istio API のドキュメントをご覧ください。(たとえば、提供されている例では、 ServiceEntry の解決を DNS_ROUND_ROBIN から DNS に更新します)。

  4. 修正を確認する: 修正を適用してから、定期的な チェックでステータスが更新されるまで最大 24 時間待ちます。

    • 修正されたリソースの ModernizationCompatible 条件は、ステータス: "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: ModernizationCompatible
      
    • gcloud container fleet mesh describe コマンドを再実行します。関連するすべての問題が解決すると、そのメンバーシップに対して MODERNIZATION_INCOMPATIBLE_CONFIG 条件が表示されなくなります。

互換性のないフリート スケールを解決する

MODERNIZATION_INCOMPATIBLE_FLEET_SCALE コードは、フリート全体のスケールがモダナイゼーションでサポートされている上限を超えているため、フリートを TRAFFIC_DIRECTOR コントロール プレーンにモダナイズできないことを示します。

このフェーズでは、次の上限でフリートのモダナイゼーションをサポートしています。

  • フリート全体で最大 1,500 個のデータプレーン エンドポイント(プロキシ)。
  • フリート全体で最大 200 個の Cloud Service Mesh サービス