排解 CA 套裝組合無效的 CRD 問題

自訂資源定義 (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

  1. 查看子類型 K8S_CRD_WITH_INVALID_CA_BUNDLE 的洞察資料和 建議, 一次選擇一項洞察資料進行疑難排解。GKE 會為每個 CRD 損壞的叢集產生一項深入分析。

  2. 執行下列指令來說明 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:

  1. 備份與這個有問題的 CRD 相關聯的現有自訂資源 (如有)。執行下列指令,匯出現有資源:

      kubectl get <crd-name> -o yaml > backup.yaml
    
  2. 刪除現有 CRD:

      kubectl delete crd <crd-name>
    
  3. 請檢查 CRD 的 caBundle 欄位,確認是否含有格式正確的 Base64 編碼 PEM 憑證。您可以直接編輯 CRD,或與編寫者聯絡。

  4. 修改 CRD YAML 定義,並使用有效的 CA 組合資料更新 spec.conversion.webhook.clientConfig.caBundle 欄位。結果應大致如下:

        spec:
          conversion:
            webhook:
              clientConfig:
                caBundle: <base64-encoded-ca-bundle>
    
  5. 套用修正後的 CRD:

        kubectl apply -f <corrected-crd-file.yaml>
    
  6. 還原自訂資源:

        kubectl apply -f backup.yaml
    

後續步驟