實作外部簽發者
cert-manager 提供許多核心簽發者類型,代表各種憑證授權單位。
由於潛在的簽發者數量大於主 cert-manager 儲存庫中可以合理支援的數量,cert-manager 也支援樹狀結構外的外部簽發者,並將它們視為與樹狀結構內的簽發者類型相同。
本文檔適用於想要建立外部簽發者的人。如需外部簽發者範例清單,請參閱簽發者頁面。
一般概述
簽發者代表簽署傳入憑證請求的憑證授權單位。在 cert-manager 中,CertificateRequest
資源代表單一已簽署憑證的請求,包含原始憑證請求 PEM 資料以及與所需憑證相關的其他資訊。
在 cert-manager 中,每個簽發者類型都有自己的控制器,監看這些 CertificateRequest
資源,並檢查給定的 CertificateRequest
是否設定為使用該簽發者。
這透過 CertificateRequest
上的 issuerRef
段落完成,其中包含簽發者的 name
、kind
和 group
。
group
表示 API 群組,例如 cert-manager.io
(負責所有核心簽發者類型)。
kind
表示簽發者的「類型」資源類型,通常是 Issuer
或 ClusterIssuer
。
name
表示指定類型的簽發者資源名稱。例如,可能是 my-ca-issuer
。
當簽發者控制器觀察到新的 CertificateRequest
參考它時,它會確保 Kubernetes 中存在相應的簽發者資源。
然後,它會使用簽發者資源中的資訊,嘗試根據憑證請求中的資訊建立已簽署的憑證。
外部簽發者範例
如果您想建立外部簽發者,最好的起點可能是外部簽發者範例。
外部簽發者範例由 cert-manager 團隊維護,其 README 檔案包含有關如何使用 Kubebuilder 和 controller-runtime 撰寫外部簽發者的逐步說明。
批准
在簽署憑證之前,簽發者必須也確保 CertificateRequest
已核准
。
如果 CertificateRequest
未核准
,則簽發者不得處理它。簽發者不負責核准 CertificateRequest
,如果發現未核准的憑證,應拒絕繼續處理。
如果針對與 Certificate
相關聯的簽發建立的 CertificateRequest
被拒絕
,則 cert-manager 的簽發控制器將使簽發失敗。
條件
一旦簽發者控制器收集了已簽署的憑證,它就會使用已簽署的憑證更新 CertificateRequest
資源的狀態。然後,將該資源的條件狀態更新為就緒狀態非常重要,因為這是向高階控制器(例如 Certificate
控制器)發出資源已準備好被使用的訊號。
相反地,如果 CertificateRequest
失敗,將資源標記為失敗也很重要,因為這也會用作向高階控制器發出的訊號。有效的條件狀態列在概念下。
實作
建議您使用 kubebuilder 專案來實作您的外部簽發者控制器。這使得產生 CustomResourceDefinitions
非常簡單,並且讓您可以使用大量的現成控制器功能。