DNS01
配置 DNS01 挑战提供者
此页面包含有关 Issuer
资源的 DNS01 挑战求解器配置中可用的不同选项的详细信息。
有关配置 ACME Issuer
及其 API 格式的更多信息,请阅读 ACME Issuers 文档。
DNS01 提供者配置必须在 Issuer
资源上指定,类似于设置文档中的示例。
您可以在 Let's Encrypt 挑战类型页面 上了解有关 DNS01 挑战类型的工作原理。
apiVersion: cert-manager.io/v1kind: Issuermetadata:name: example-issuerspec:acme:email: user@example.comserver: https://acme-staging-v02.api.letsencrypt.org/directoryprivateKeySecretRef:name: example-issuer-account-keysolvers:- dns01:cloudDNS:project: my-projectserviceAccountSecretRef:name: prod-clouddns-svc-acct-secretkey: 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
- 创建一个指向此权限较低的域的 CNAME 记录
_acme-challenge.example.com IN CNAME _acme-challenge.less-privileged.example.org.
-
授予 cert-manager 更新权限较低的
less-privileged.example.org
区域的权限 -
提供更新此权限较低的区域的配置/凭据,并在相关的
dns01
求解器中添加一个额外的字段。请注意,selector
字段仍然适用于原始的example.com
,而凭据是为less-privileged.example.org
提供的
apiVersion: cert-manager.io/v1kind: Issuermetadata:...spec:acme:...solvers:- selector:dnsZones:- 'example.com'dns01:# Valid values are None and FollowcnameStrategy: Followroute53:region: eu-central-1accessKeyID: <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 提供者。以下是这些支持提供者及其文档的链接。
AliDNS-Webhook
cert-manager-alidns-webhook
cert-manager-webhook-civo
cert-manager-webhook-dnspod
cert-manager-webhook-dnsimple
cert-manager-webhook-gandi
cert-manager-webhook-infomaniak
cert-manager-webhook-inwx
cert-manager-webhook-linode
cert-manager-webhook-oci
(Oracle Cloud Infrastructure)cert-manager-webhook-scaleway
cert-manager-webhook-selectel
cert-manager-webhook-softlayer
cert-manager-webhook-ibmcis
cert-manager-webhook-loopia
cert-manager-webhook-arvan
bizflycloud-certmanager-dns-webhook
cert-manager-webhook-hetzner
cert-manager-webhook-yandex-cloud
cert-manager-webhook-netcup
cert-manager-webhook-pdns
cert-manager-webhook-zilore
stackit-cert-manager-webhook
cert-manager-webhook-vercel
cert-manager-webhook-opentelekomcloud
您可以在 此处 找到有关如何配置 Webhook 提供者的更多信息。
要创建一个新的不受支持的 DNS 提供者,请遵循 此处 的开发文档。