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.comCN 以及subjectAltName 字段中的*.my-domain.commy-domain.com 的证书。

【讨论】:

非常感谢您的回答。但是当我尝试将dnsZones 属性添加到Certificate 资源时,它会引发错误:错误验证数据:ValidationError(Certificate.spec): unknown field "dnsZones" in io.cert-manager.v1.Certificate.spec;dnsZones 键不是仅适用于颁发者选择器吗?

以上是关于cert-manager DNS01 质询失败 - 找不到通配符域的区域的主要内容,如果未能解决你的问题,请参考以下文章

带有证书管理器和 Nginx 入口的 404 质询响应

Cert-Manager 证书更新过程 - 它是如何执行的?

从 Helm stable/cert-manager 升级到 jetstack/cert-manager

Cert Manager 申请SSL证书流程及相关概念-二

Kubernetes集群——Cert-manager与Let'sencrypt证书自动管理

具有质询-响应的认证系统