最新:在推特Mastodon

实施外部颁发者

cert-manager 提供了多种 核心颁发者类型,代表各种证书颁发机构。

由于潜在颁发者的数量超过了 cert-manager 主存储库中可以合理支持的数量,因此 cert-manager 还支持树外外部颁发者,并将它们与树内颁发者类型同等对待。

本文件适用于希望创建外部颁发者的用户。有关示例外部颁发者的列表,请参阅颁发者页面

概述

颁发者代表一个证书颁发机构,它会签署传入的证书请求。在 cert-manager 中,CertificateRequest 资源表示对已签名证书的单个请求,其中包含原始证书请求 PEM 数据以及与所需证书相关的其他信息。

在 cert-manager 中,每种颁发者类型都有自己的控制器,它会监控这些 CertificateRequest 资源并检查给定的 CertificateRequest 是否配置为使用该颁发者。

这可以通过 issuerRef 段落完成,该段落位于 CertificateRequest 上,其中包含颁发者 namekindgroup

group 表示 API 组,例如 cert-manager.io(负责所有核心颁发者类型)。

kind 表示颁发者的“kind”资源类型,通常为 IssuerClusterIssuer

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 变得非常简单,并且为您提供了许多开箱即用的控制器功能。

如果您对如何实现外部颁发者控制器有更多疑问,最好在 Slack 上联系我们或加入社区通话