構成に関する問題の解決

このセクションでは、Cloud Service Mesh の一般的な問題とその解決方法について説明します。さらにサポートが必要な場合は、サポートの利用をご覧ください。

メンバーシップ状態を確認する

次のコマンドを実行すると、メッシュの最新ステータスをいつでも確認できます。

gcloud container fleet mesh describe

出力は次のようになります。

...
membershipSpecs:
  projects/project_id/locations/global/memberships/cluster:
    mesh:
      management: MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster:
    servicemesh:
      ...
      conditions:
        - code: CONFIG_VALIDATION_WARNING
          documentationLink: https://cloud.google.com/...
          details: Application of one or more configs has failed. Error details are shown on individual config resources. See documentation link for more detail.
          severity: WARNING
...

MembershipState のエラーコード

Cloud Service Mesh によりクラスタの MembershipState に条件が報告される場合は、メッシュ構成(Istio カスタム リソースなど)を適用できていない可能性があります。この問題の対処方法に関する詳細は、次のエラーコードの説明で確認してください。

エラーコード 原因 解決策
CONFIG_APPLY_INTERNAL_ERROR 内部エラーにより、1 つ以上の構成が適用されなかった。 カスタマー サポートまでお問い合わせください。
QUOTA_EXCEEDED_* リソースが割り当ての上限に達したため、1 つ以上の構成が適用されなかった。 具体的な割り当て、および割り当ての増加方法については、割り当てをご覧ください。
CONFIG_VALIDATION_ERROR 無効な構成が原因で、1 つ以上の構成が適用されなかった。 原因となった構成ファイルに、エラーが具体的に書き込まれます。診断方法の詳細については、構成検証エラーのセクションをご覧ください。
CONFIG_VALIDATION_WARNING 1 つ以上の構成で潜在的な問題が見つかった。これらの問題に対処されていない可能性があり、対処されている場合でも意図しない動作が発生する可能性がある。 診断方法の詳細については、構成検証エラーのセクションをご覧ください。
MULTICLUSTER_SECRET_WARNING クラスタがエンドポイント検出に宣言型マルチクラスタ API を使用せず、手動で作成された Istio マルチクラスタ シークレットを使用している。 マルチクラスタ エンドポイント検出の設定を、宣言型の実装に変更します。詳細については、マルチクラスタ シークレットのページをご覧ください。

構成の検証エラー

CONFIG_VALIDATION_WARNING コードと CONFIG_VALIDATION_ERROR コードからは、メッシュ構成(Istio または Kubernetes カスタム リソース)で問題が見つかったことと、構成のサブセットが正しく適用されていない可能性があることがわかります。

リソースごとのエラーの詳細の多くは、該当するリソースに書き込まれます。次のコマンドを使用すると、無効な構成を見つけて、指定したエラー メッセージを表示できます(注: これらは Istio リソースに固有のものであり、すべての検証エラーがここに表示されているとは限りません)。

for resource in serviceentries destinationrules virtualservices gateways peerauthentications authorizationpolicies requestauthentications sidecars telemetries envoyfilters;
  do kubectl get $resource --all-namespaces --output=json | \
   jq  '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "Accepted" and .status == "False")) | {"name": .metadata.name, "namespace": .metadata.namespace, "kind": .kind, "conditions": .status.conditions}';
done

出力は次のようになります。

{
  "name": "demo-envoy-filter",
  "namespace": "default",
  "kind": "EnvoyFilter",
  "conditions": [
    {
      "lastTransitionTime": "2024-04-04T21:10:18.046975988Z",
      "message": "This API is not supported",
      "reason": "Invalid",
      "status": "False",
      "type": "Accepted"
    }
  ]
}