新消息:在TwitterMastodon取得專案更新

實作外部簽發者

cert-manager 提供許多核心簽發者類型,代表各種憑證授權單位。

由於潛在的簽發者數量大於主 cert-manager 儲存庫中可以合理支援的數量,cert-manager 也支援樹狀結構外的外部簽發者,並將它們視為與樹狀結構內的簽發者類型相同。

本文檔適用於想要建立外部簽發者的人。如需外部簽發者範例清單,請參閱簽發者頁面

一般概述

簽發者代表簽署傳入憑證請求的憑證授權單位。在 cert-manager 中,CertificateRequest 資源代表單一已簽署憑證的請求,包含原始憑證請求 PEM 資料以及與所需憑證相關的其他資訊。

在 cert-manager 中,每個簽發者類型都有自己的控制器,監看這些 CertificateRequest 資源,並檢查給定的 CertificateRequest 是否設定為使用該簽發者。

這透過 CertificateRequest 上的 issuerRef 段落完成,其中包含簽發者的 namekindgroup

group 表示 API 群組,例如 cert-manager.io(負責所有核心簽發者類型)。

kind 表示簽發者的「類型」資源類型,通常是 IssuerClusterIssuer

name 表示指定類型的簽發者資源名稱。例如,可能是 my-ca-issuer

當簽發者控制器觀察到新的 CertificateRequest 參考它時,它會確保 Kubernetes 中存在相應的簽發者資源。

然後,它會使用簽發者資源中的資訊,嘗試根據憑證請求中的資訊建立已簽署的憑證。

外部簽發者範例

如果您想建立外部簽發者,最好的起點可能是外部簽發者範例

外部簽發者範例由 cert-manager 團隊維護,其 README 檔案包含有關如何使用 Kubebuilder 和 controller-runtime 撰寫外部簽發者的逐步說明。

批准

在簽署憑證之前,簽發者必須也確保 CertificateRequest核准

如果 CertificateRequest核准,則簽發者不得處理它。簽發者不負責核准 CertificateRequest,如果發現未核准的憑證,應拒絕繼續處理。

如果針對與 Certificate 相關聯的簽發建立的 CertificateRequest拒絕,則 cert-manager 的簽發控制器將使簽發失敗。

條件

一旦簽發者控制器收集了已簽署的憑證,它就會使用已簽署的憑證更新 CertificateRequest 資源的狀態。然後,將該資源的條件狀態更新為就緒狀態非常重要,因為這是向高階控制器(例如 Certificate 控制器)發出資源已準備好被使用的訊號。

相反地,如果 CertificateRequest 失敗,將資源標記為失敗也很重要,因為這也會用作向高階控制器發出的訊號。有效的條件狀態列在概念下。

實作

建議您使用 kubebuilder 專案來實作您的外部簽發者控制器。這使得產生 CustomResourceDefinitions 非常簡單,並且讓您可以使用大量的現成控制器功能。

如果您對於如何實作外部簽發者控制器有進一步的問題,最好在 Slack 上聯絡或加入社群電話會議