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 条件が表示されなくなります。