自訂資源定義 (CRD) 是擴充 Kubernetes 功能的強大工具。不過,如果 CRD 的轉換 Webhook 設定spec.conversion.webhook.clientConfig.caBundle
含有無效或格式錯誤的憑證授權單位 (CA) 組合,可能會中斷叢集作業。這可能會在資源建立、更新或刪除期間顯示為錯誤。Google Kubernetes Engine (GKE) 會監控叢集,並使用 Recommender 服務提供指引,說明如何最佳化平台使用情形。
為確保叢集保持穩定且效能良好,請參閱 GKE 針對運作中但 CA 組合無效的 CRD 提供的建議。請按照這份指南檢查可能設定錯誤的 CRD,並視需要更新。如要進一步瞭解如何管理 Recommenders 的深入分析和建議,請參閱「運用深入分析和建議,最佳化 GKE 用量」。
找出受影響的叢集
如要取得洞察資料,找出受無效 CA 組合影響的 CRD 叢集,請按照操作說明查看子類型 K8S_CRD_WITH_INVALID_CA_BUNDLE
的洞察資料和建議。您可以透過下列方式取得洞察資料:
- 使用 Google Cloud 控制台。
- 使用 Google Cloud CLI 或 Recommender API,並以子類型
K8S_CRD_WITH_INVALID_CA_BUNDLE
進行篩選。
使用洞察資料找出 CRD 後,請按照說明排解設定錯誤的 CA 組合。
GKE 偵測到設定錯誤的 CRD 時
如果 GKE 叢集有一個或多個 CRD 回報 spec.conversion.webhook.clientConfig
中 Webhook 用戶端設定的 caBundle
設定錯誤,GKE 會產生 K8S_CRD_WITH_INVALID_CA_BUNDLE
子類型的洞察和建議。
按照操作說明檢查 CA 組合設定錯誤的 CRD。
排解偵測到的 CRD 問題
以下各節提供操作說明,協助您排解 GKE 偵測到的潛在設定錯誤 CRD。
按照指示操作並正確設定 CRD 後,建議會在 24 小時內解決,且不會再顯示於控制台中。如果導入建議的指引不到 24 小時,您可以將建議標示為已解決。 如果不想採用建議,可以關閉。
找出叢集中受影響的 CRD
查看子類型
K8S_CRD_WITH_INVALID_CA_BUNDLE
的洞察資料和建議,一次選擇一項洞察資料進行疑難排解。如果叢集有損毀的 CRD,GKE 會為每個叢集產生一項洞察。執行下列指令來說明 Service,找出可能含有問題 CA 組合的 CRD:
kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundle
輸出內容包含下列項目:
- 名稱:CRD 的名稱。
- CaBundle:與 CRD 轉換 Webhook 相關聯的 CA 組合 (如有)。檢查輸出內容。如果您知道某個 CRD 使用轉換 Webhook,但 caBundle 欄位為空白,這表示 caBundle 可能有問題。
重新建立 CRD
如要解決這項錯誤,請使用有效的 CA 組合重新建立受影響的 CRD:
備份與這個有問題的 CRD 相關聯的現有自訂資源 (如有)。執行下列指令,匯出現有資源:
kubectl get <crd-name> -o yaml > backup.yaml
刪除現有 CRD:
kubectl delete crd <crd-name>
請檢查 CRD 的
caBundle
欄位,確認是否含有格式正確的 Base64 編碼 PEM 憑證。您可以直接編輯 CRD,或與編寫者聯絡。修改 CRD YAML 定義,使用有效的 CA 組合資料更新
spec.conversion.webhook.clientConfig.caBundle
欄位。結果應如下所示:spec: conversion: webhook: clientConfig: caBundle: <base64-encoded-ca-bundle>
套用修正後的 CRD:
kubectl apply -f <corrected-crd-file.yaml>
還原自訂資源:
kubectl apply -f backup.yaml