最新:在 推特Mastodon 上获得项目更新。

DNS01

配置 DNS01 挑战提供者

此页面包含有关 Issuer 资源的 DNS01 挑战求解器配置中可用的不同选项的详细信息。

有关配置 ACME Issuer 及其 API 格式的更多信息,请阅读 ACME Issuers 文档。

DNS01 提供者配置必须在 Issuer 资源上指定,类似于设置文档中的示例。

您可以在 Let's Encrypt 挑战类型页面 上了解有关 DNS01 挑战类型的工作原理。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: example-issuer
spec:
acme:
email: user@example.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: example-issuer-account-key
solvers:
- dns01:
cloudDNS:
project: my-project
serviceAccountSecretRef:
name: prod-clouddns-svc-acct-secret
key: service-account.json

每个颁发者可以指定多个不同的 DNS01 挑战提供者,并且也可以在单个 Issuer 上拥有多个相同 DNS 提供者的实例(例如,可以设置两个 CloudDNS 帐户,每个帐户都有自己的名称)。

有关在单个 Issuer 上使用多个求解器类型的更多信息,请阅读多个求解器类型部分。

为 DNS01 自检设置命名服务器

cert-manager 将在尝试 DNS01 挑战之前检查是否存在正确的 DNS 记录。默认情况下,cert-manager 将使用从 /etc/resolv.conf 获取的递归命名服务器来查询权威命名服务器,然后它将直接查询这些服务器以验证 DNS 记录是否存在。

如果不需要这样做(例如,具有多个权威命名服务器或拆分范围 DNS),则 cert-manager 控制器公开了两个标志,允许您更改此行为

--dns01-recursive-nameservers 使用主机和端口的逗号分隔字符串,表示 cert-manager 应该查询的递归命名服务器。

--dns01-recursive-nameservers-only 强制 cert-manager 仅使用递归命名服务器进行验证。启用此选项可能会导致 DNS01 自检时间更长,因为递归命名服务器执行了缓存操作。

示例用法

--dns01-recursive-nameservers-only --dns01-recursive-nameservers=8.8.8.8:53,1.1.1.1:53

如果您使用的是 cert-manager helm 图表,则可以通过 .Values.extraArgs 设置递归命名服务器,或者在 helm install/upgrade 时使用 --set 命令设置。

--set 'extraArgs={--dns01-recursive-nameservers-only,--dns01-recursive-nameservers=8.8.8.8:53\,1.1.1.1:53}'

DNS01 的委托域

默认情况下,cert-manager 不会跟踪指向子域的 CNAME 记录。

如果不想授予 cert-manager 访问根 DNS 区域的权限,则可以将 _acme-challenge.example.com 子域委托给其他权限较低的域(less-privileged.example.org)。这可以通过以下方式实现。假设,您有两个区域

  • example.com
  • less-privileged.example.org
  1. 创建一个指向此权限较低的域的 CNAME 记录
_acme-challenge.example.com IN CNAME _acme-challenge.less-privileged.example.org.
  1. 授予 cert-manager 更新权限较低的 less-privileged.example.org 区域的权限

  2. 提供更新此权限较低的区域的配置/凭据,并在相关的 dns01 求解器中添加一个额外的字段。请注意,selector 字段仍然适用于原始的 example.com,而凭据是为 less-privileged.example.org 提供的

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
...
spec:
acme:
...
solvers:
- selector:
dnsZones:
- 'example.com'
dns01:
# Valid values are None and Follow
cnameStrategy: Follow
route53:
region: eu-central-1
accessKeyID: <Access ID for less-privileged.example.org here>
hostedZoneID: <Zone ID for less-privileged.example.org here>
secretAccessKeySecretRef:
...

如果您有许多需要单独证书的(子)域,则可以共享一个别名化的权限较低的域。为了实现它,您应该为每个(子)域创建类似于此的 CNAME 记录

_acme-challenge.example.com IN CNAME _acme-challenge.less-privileged.example.org.
_acme-challenge.www.example.com IN CNAME _acme-challenge.less-privileged.example.org.
_acme-challenge.foo.example.com IN CNAME _acme-challenge.less-privileged.example.org.
_acme-challenge.bar.example.com IN CNAME _acme-challenge.less-privileged.example.org.

使用此配置,cert-manager 将递归地跟踪 CNAME 记录,以确定在 DNS01 挑战期间要更新哪个 DNS 区域。

支持的 DNS01 提供者

ACME Issuer 支持许多不同的 DNS 提供者。以下是可用提供者的列表,以及它们的 .yaml 配置,以及有关其用法的其他 Kubernetes 和提供者特定说明。

Webhook

cert-manager 还支持使用外部 Webhook 的树外 DNS 提供者。以下是这些支持提供者及其文档的链接。

您可以在 此处 找到有关如何配置 Webhook 提供者的更多信息。

要创建一个新的不受支持的 DNS 提供者,请遵循 此处 的开发文档。