自訂資源定義 (CRD) 是擴充 Kubernetes 功能的強大工具。不過,如果 CRD 的轉換 Webhook 設定 spec.conversion.webhook.clientConfig.caBundle 包含無效或格式錯誤的憑證授權單位 (CA) 組合,可能會中斷叢集作業。這個問題可能會在建立、更新或刪除資源時,以錯誤的形式出現,影響叢集的穩定性和效能。
為避免發生這個問題,Google Kubernetes Engine (GKE) 會自動偵測 CA 套件無效的 CRD,並產生建議。請參閱這份文件,找出建議、找出設定錯誤的 CRD,並更新這些 CRD。
這項資訊對於平台管理員和操作員,以及在 GKE 中管理 CRD 和自訂資源的其他使用者來說非常重要。
找出受影響的叢集
如要取得洞察資料,找出受無效 CA 套裝組合影響的自訂資源定義,請按照指示
查看子類型 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的洞察資料和 建議, 一次選擇一項洞察資料進行疑難排解。GKE 會為每個 CRD 損壞的叢集產生一項深入分析。執行下列指令來說明 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