cert-manager DNS01 质询失败 - 找不到通配符域的区域
Posted
技术标签:
【中文标题】cert-manager DNS01 质询失败 - 找不到通配符域的区域【英文标题】:cert-manager DNS01 Challenge fails - found no zone for wildcard domain 【发布时间】:2021-11-22 07:39:25 【问题描述】:我在通配符证书质询中收到此错误:
呈现挑战时出错:找不到域 _acme-challenge.my-domain.com 的区域。 (不在 SLD 中的子域 noir 中)请确保配置中的域条目正确,并且 API 已正确设置为具有 Zone.read 权限。
我使用 Cloudflare 作为 DNS01 Challenge Provider,并已使用cert-manager documentation 中描述的权限设置 API 令牌。
我的集群颁发者如下所示:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: test-issuer
spec:
acme:
email: <email>
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: test-issuer-private-key
solvers:
- dns01:
cloudflare:
email: <email>
apiTokenSecretRef:
name: issuer-access-token
key: api-token
还有我的证书:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: test-wildcard
spec:
secretName: test-wildcard-tls
issuerRef:
name: test-issuer
kind: ClusterIssuer
dnsNames:
- "*.my-domain.com"
我有一个带有“*”名称的 CNAME 记录指向我的域,还有一条 A 记录指向我的 Kubernetes 集群 IP。
我错过了什么吗?您如何正确设置 cert-manager 以使用 Cloudflare 作为 DNS01 Challenge Provider 自动管理通配符域?
【问题讨论】:
【参考方案1】:我也遇到过这个问题,我意识到我在配置中犯了两个不同的错误。
#1:我忽略了您生成的 API Token 必须具有以下所有权限和与之关联的区域资源:
权限Zone.Zone.Read
Zone.Zone.Edit
区域资源
Include.All zones
这是in the docs,但显然我没有正确阅读。
#2:我无法使用Certificate
资源中的dnsNames
属性使其工作,而是需要使用dnsZones
。在您的示例中,尝试更改:
dnsNames:
- "*.my-domain.com"
到:
dnsZones:
- "my-domain.com"
根据这个文档(强调我的):
注意:dnsNames 采用完全匹配且不解析通配符,这意味着以下 Issuer 将无法解析 foo.example.com 等 DNS 名称。 使用 dnsZones 选择器类型来匹配区域内的所有子域。
这应该会生成一个带有*.my-domain.com
的CN
以及subjectAltName
字段中的*.my-domain.com
和my-domain.com
的证书。
【讨论】:
非常感谢您的回答。但是当我尝试将dnsZones
属性添加到Certificate
资源时,它会引发错误:错误验证数据:ValidationError(Certificate.spec): unknown field "dnsZones" in io.cert-manager.v1.Certificate.spec;
。 dnsZones
键不是仅适用于颁发者选择器吗?以上是关于cert-manager DNS01 质询失败 - 找不到通配符域的区域的主要内容,如果未能解决你的问题,请参考以下文章
Cert-Manager 证书更新过程 - 它是如何执行的?
从 Helm stable/cert-manager 升级到 jetstack/cert-manager