实施外部颁发者
cert-manager 提供了多种 核心颁发者类型,代表各种证书颁发机构。
由于潜在颁发者的数量超过了 cert-manager 主存储库中可以合理支持的数量,因此 cert-manager 还支持树外外部颁发者,并将它们与树内颁发者类型同等对待。
本文件适用于希望创建外部颁发者的用户。有关示例外部颁发者的列表,请参阅颁发者页面。
概述
颁发者代表一个证书颁发机构,它会签署传入的证书请求。在 cert-manager 中,CertificateRequest
资源表示对已签名证书的单个请求,其中包含原始证书请求 PEM 数据以及与所需证书相关的其他信息。
在 cert-manager 中,每种颁发者类型都有自己的控制器,它会监控这些 CertificateRequest
资源并检查给定的 CertificateRequest
是否配置为使用该颁发者。
这可以通过 issuerRef
段落完成,该段落位于 CertificateRequest
上,其中包含颁发者 name
、kind
和 group
。
group
表示 API 组,例如 cert-manager.io
(负责所有核心颁发者类型)。
kind
表示颁发者的“kind”资源类型,通常为 Issuer
或 ClusterIssuer
。
name
表示指定 kind 的颁发者资源的名称。例如 my-ca-issuer
。
当颁发者控制器观察到一个新的 CertificateRequest
指向它时,它会确保 Kubernetes 中存在相应的颁发者资源。
然后,它将使用颁发者资源中的信息,根据证书请求中的信息尝试创建已签名的证书。
示例外部颁发者
如果您想创建外部颁发者,最好的起点可能是 示例外部颁发者。
示例外部颁发者由 cert-manager 团队维护,其 README 文件包含有关如何使用 Kubebuilder 和 controller-runtime 编写外部颁发者的分步说明。
批准
在签署证书之前,颁发者必须还确保 CertificateRequest
已批准
。
如果 CertificateRequest
未批准
,颁发者不得处理它。颁发者不负责批准 CertificateRequests
,如果发现未批准的证书,应拒绝继续进行。
如果为与 Certificate
关联的发行创建的 CertificateRequest
被拒绝
,cert-manager 的发行控制器将使发行失败。
条件
颁发者控制器收集到已签名证书后,它会使用已签名证书更新 CertificateRequest
资源的状态。然后,重要的是将该资源的条件状态更新为就绪状态,因为这是用于向更高阶控制器(例如 Certificate
控制器)发出资源已准备好使用的信号。
相反,如果 CertificateRequest
失败,同样重要的是将资源标记为失败,因为这也将用作向更高阶控制器发出的信号。有效条件状态列在概念下。
实现
建议您使用 kubebuilder 项目来实现您的外部颁发者控制器。这使得生成 CustomResourceDefinitions
变得非常简单,并且为您提供了许多开箱即用的控制器功能。