解決設定問題
本節說明常見的 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 報告情況,可能表示系統無法套用網格設定 (例如 Istio 自訂資源)。如要進一步瞭解如何解決問題,請參閱下方的錯誤代碼說明。
錯誤代碼 | 原因 | 解決方法 |
---|---|---|
CONFIG_APPLY_INTERNAL_ERROR |
發生內部錯誤,因此無法套用一或多個設定。 | 請與客戶服務團隊聯絡。 |
QUOTA_EXCEEDED_* |
資源達到配額上限,因此無法套用一或多項設定。 | 如要瞭解具體配額和如何提高配額,請參閱「配額」。 |
CONFIG_VALIDATION_ERROR |
設定無效,因此無法套用一或多個設定。 | 系統會將特定錯誤寫入導致錯誤的設定。如要進一步瞭解如何診斷這些錯誤,請參閱「 設定驗證錯誤」一節。 |
CONFIG_VALIDATION_WARNING |
我們發現一或多個設定檔可能存在問題。這些變更可能未套用,如果已套用,可能會導致非預期的行為。 | 如要進一步瞭解如何診斷這些錯誤,請參閱「 設定驗證錯誤」一節。 |
MULTICLUSTER_SECRET_WARNING |
叢集使用手動建立的 Istio 多叢集密鑰,而非使用宣告式多叢集 API 探索端點。 | 將多叢集端點探索設定移至宣告式實作。詳情請參閱「多叢集密鑰」頁面。 |
WORKLOAD_IDENTITY_REQUIRED |
叢集或至少一個節點集區未啟用 Workload Identity。 | 在叢集和節點集區層級啟用 Workload Identity。如需操作說明,請參閱「啟用工作負載身分」頁面。 |
MANAGED_CNI_NOT_ENABLED |
這個叢集未啟用代管 CNI。 | 啟用受管理 CNI,在網格中維持最佳做法。詳情請參閱「啟用受管理 CNI」頁面。 |
NON_STANDARD_SIDECAR_BINARY_USAGE |
Istio 容器內的一或多個指令使用的二進位檔不是 `envoy`、`pilot_agent` 或 `iptables`。 | 移除對不支援二進位檔的依附元件。詳情請參閱「不支援的二進位檔用法」頁面。 |
UNSUPPORTED_GATEWAY_CLASS_USAGE |
叢集設定的閘道類別 (Istio 和 Anthos 服務網格) 需要遷移至 Istio Ingress 閘道,才能符合最佳做法。 | 如需詳細操作說明,請參閱說明文件。 |
UNSUPPORTED_MULTIPLE_CONTROL_PLANES |
叢集已佈建多個控制層通道。 每個叢集只能使用一個通道。 | 詳情請參閱「修正多個控制層」。 |
設定驗證錯誤
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"
}
]
}