構成の問題を解決する

このセクションでは、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"
    }
  ]
}