新功能:在TwitterMastodon

ACME 订单和挑战

cert-manager 支持从 ACME 服务器请求证书,包括使用 Let's Encrypt,并使用 ACME 发行器。 这些证书通常被大多数计算机在公共互联网上信任。为了成功地请求证书,cert-manager 必须解决 ACME 挑战,这些挑战需要完成以证明客户端拥有正在请求的 DNS 地址。

为了完成这些挑战,cert-manager 引入了两个 自定义资源 类型;订单挑战

订单

订单 资源由 ACME 发行器用于管理已签署 TLS 证书的 ACME '订单' 的生命周期。有关 ACME 订单和域名验证的更多详细信息,请访问 Let's Encrypt 网站 此处。 订单表示单个证书请求,一旦创建新的 证书请求 资源引用 ACME 发行器,将自动创建该订单。 证书请求 资源由 cert-manager 在创建 证书 资源、更改其规范或需要续订时自动创建。

作为最终用户,您无需手动创建 订单 资源。创建后,订单 无法更改。相反,必须创建新的 订单 资源。

订单 资源封装了该 '订单' 的多个 ACME '挑战',因此,它将管理一个或多个 挑战 资源。

挑战

挑战 资源由 ACME 发行器用于管理必须完成的 ACME '挑战' 的生命周期,以完成单个 DNS 名称/标识符的 '授权'。

当创建 订单 资源时,订单控制器将为每个与 ACME 服务器进行授权的 DNS 名称创建 挑战 资源。

作为最终用户,您无需手动创建 挑战 资源。创建后,挑战 无法更改。相反,必须创建新的 挑战 资源。

挑战生命周期

创建 挑战 资源后,它将最初被排队等待处理。只有在挑战被 '计划' 开始后才会开始处理。此计划过程可防止一次尝试太多挑战,或一次尝试多个针对相同 DNS 名称的挑战。有关挑战如何计划的更多信息,请阅读 挑战计划

计划挑战后,它将首先与 ACME 服务器 '同步' 以确定其当前状态。如果挑战已有效,则其 '状态' 将更新为 '有效',并且还将设置 status.processing = false 以 '取消计划' 本身。

如果挑战仍然 '待定',挑战控制器将使用配置的求解器(HTTP01 或 DNS01 之一)来 '呈现' 挑战。呈现挑战后,它将设置 status.presented = true

呈现后,挑战控制器将执行 '自我检查',以确保挑战已 '传播'(即,权威 DNS 服务器已更新以正确响应,或者对入口资源的更改已被观察到并由入口控制器使用)。

如果自我检查失败,cert-manager 将以固定的 10 秒重试间隔重试自我检查。永远无法完成自我检查的挑战将继续重试,直到用户通过以下任一方式进行干预:重试 订单(通过删除 订单 资源)或修改关联的 证书 资源以解决任何配置错误。

自我检查通过后,与该挑战关联的 ACME '授权' 将被 '接受'。

接受授权后的最终状态将复制到挑战的 status.state 字段,以及如果 ACME 服务器尝试验证挑战时出现错误,则出现 '错误原因'。

挑战进入 有效无效过期撤销 状态后,它将设置 status.processing = false 以防止对 ACME 挑战进行任何进一步的处理,并允许计划另一个挑战(如果有待完成的挑战积压)。

挑战计划

cert-manager '计划' 挑战,而不是尝试一次处理所有挑战。

此调度程序对同时挑战的最大数量应用上限,并且不允许针对相同 DNS 名称和求解器类型(HTTP01DNS01)的两个挑战同时完成。

截至 ddff78,一次可以处理的最大挑战数量为 60。