構成に関する問題の解決

このセクションでは、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 つ以上の構成で潜在的な問題が見つかりました。これらの問題が適用されていない可能性があります。適用されている場合でも、意図しない動作が発生する可能性があります。 診断方法の詳細については、構成検証エラーのセクションをご覧ください。

構成の検証エラー

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"
    }
  ]
}