解決設定問題

本節說明常見的 Cloud Service Mesh 問題,以及如何解決這些問題。如需其他協助,請參閱「取得支援」一文。

檢查 MembershipState

您隨時可以執行下列指令,查看網格的最新狀態:

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 回報條件,可能表示無法套用 Mesh 設定 (例如 Istio 自訂資源)。請參閱以下錯誤代碼說明,進一步瞭解如何解決這些問題。

錯誤代碼 原因 解析度
CONFIG_APPLY_INTERNAL_ERROR 發生內部錯誤,因此無法套用一或多個設定。 請與客戶服務團隊聯絡。
QUOTA_EXCEEDED_* 資源已達配額上限,因此無法套用一或多個設定。 如要瞭解特定配額和如何提高配額,請參閱「配額」。
CONFIG_VALIDATION_ERROR 由於設定無效,因此無法套用一或多個設定。 系統會將特定錯誤寫入導致錯誤的設定。如要進一步瞭解如何診斷這些錯誤,請參閱「 設定驗證錯誤」一節。
CONFIG_VALIDATION_WARNING 我們在一個或多個設定檔中遇到潛在問題。這些設定可能未套用,即使套用了,也可能會導致非預期的行為。 如要進一步瞭解如何診斷這些錯誤,請參閱「 設定驗證錯誤」一節。
MULTICLUSTER_SECRET_WARNING 叢集使用手動建立的 Istio 多叢集密鑰,而非使用宣告式多叢集 API 進行端點探索。 將多叢集端點探索設定移至宣告式實作。詳情請參閱「多叢集密鑰」頁面。
WORKLOAD_IDENTITY_REQUIRED 叢集或至少一個節點集區未啟用工作負載身分識別。 在叢集和節點集區層級啟用 Workload Identity。如需操作說明,請參閱「啟用工作負載身分」頁面。
MANAGED_CNI_NOT_ENABLED 這個叢集未啟用 Managed CNI。 啟用 Managed CNI,以便在網狀結構中維持最佳做法。詳情請參閱「啟用受控 CNI」頁面。
NON_STANDARD_SIDECAR_BINARY_USAGE Istio 容器中有一或多個指令使用了 `envoy`、`pilot_agent` 或 `iptables` 以外的二進位檔。 移除對不支援的二進位檔的依附元件。詳情請參閱「不支援的二進位元使用情形」頁面。
UNSUPPORTED_GATEWAY_CLASS_USAGE 叢集會使用閘道類別 (Istio 和 Anthos 服務網格) 進行設定,這些類別需要遷移至 Istio Ingress 閘道,以符合最佳做法。 詳情請參閱說明文件

設定驗證錯誤

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