我正在运行一个小型 K3S 集群,并使用 Cert-Manager 向集群中运行的应用程序颁发 Let’s Encrypt 证书。

集群是通过 Ansible 安装的,并且初始生成的证书工作正常,但由于某些奇怪的原因,Cert-Manager 不会更新证书?

快速参考:主要主域名是molgaard.eu,由 Simply.com 托管。

该集群位于 home.molgaard.eu,这是一个无法从互联网访问的子域,因此为了在表单上颁发 Let’s Encrypt 证书:(something).home.molgaard.eu我需要确保dns01在续订期间使用 Cert-Manager。

这一切都由以下 Ansible 任务处理:

- name: Create Lets Encrypt ClusterIssuer
  kubernetes.core.k8s:
    state: present
    definition:
      apiVersion: cert-manager.io/v1
      kind: ClusterIssuer
      metadata:
        name: letsencrypt-prod
      spec:
        acme:
          email: *** REDACTED ***
          server: https://acme-v02.api.letsencrypt.org/directory
          privateKeySecretRef:
            name: letsencrypt-prod-private-key
          solvers:
            - dns01:
                webhook:
                  groupName: com.github.runnerm.cert-manager-simply-webhook
                  solverName: simply-dns-solver
                  config:
                    secretName: simply-credentials
              selector:
                dnsZones:
                  - molgaard.eu

当我创建集群时,这部分工作正常,但是当更新时,显然出现了问题:

当我尝试调试为续订证书而创建的挑战时发生了以下情况unifi.home.molgaard.eu

相关摘录kubectl get challenges unifi-tls-2-3236526805-1144319786 -ojson如下:

    "status": {
        "presented": false,
        "processing": true,
        "reason": "When querying the SOA record for the domain '_acme-challenge.unifi.home.molgaard.eu.' using nameservers [8.8.8.8:53 1.1.1.1:53], rcode was expected to be 'NOERROR' or 'NXDOMAIN', but I got 'SERVFAIL'",
        "state": "pending"
    }

我知道它与 DNS 相关,并且我希望在请求 SOA 时,它会指向 Simply.com 托管的 DNS 服务器?

在网上搜索后,我确实找到了,但我不知道它是否适用于我的问题?

10

  • 1
    没有可访问的权限home.molgaard.eu– 您最近是否更改(或添加)了某些 DNS 记录?注意:您需要的 DNS 记录存在于 上ns1.simply.com,它们只是似乎尚未传播。


    – 


  • DNS 没有任何变化,尽管我确实有一个本地 Bind9 服务器来处理子域的请求home.molgaard.eu,但我已明确告诉 cert-manager 使用 Google 和 CloudFlare DNS 进行 DNS 解析、颁发和更新 Let’s Encrypt 证书,所以这应该不是问题……还是?我是否应该创建一个本地CNAME记录_acme-challenge.unifi.home.molgaard.eu CNAME _acme-challenge.molgaard.eu,并告诉 cert-manager 使用本地 DNS,然后将其添加cnameStrategy: Follow到我的 Ansible 脚本中?


    – 

  • I have explicitly told cert-manager to use Google and CloudFlare DNS for DNS resolving issuing and renewing Let's Encrypt certificates, so that should not be an issue– 那么,既然 lets encrypt 无法访问本地绑定服务器来解析这些地址,那 lets encrypt 如何解析它需要的地址呢???但是ns1.simply.com它确实解析了这些地址,不知道为什么它们没有传播到任何地方


    – 

  • 为什么ns1.simply.com8.8.8.8 知道,unifi.home.molgaard.eu但是 8.8.8.8 不知道呢?


    – 

  • cert-manager 有一个 API 密钥,它用于创建记录。它存储在我的 Ansible 任务的_acme-challenge.unifi.home.molgaard.eu凭据中。在初始验证期间,它在 Simply.com 上创建记录没有问题。另外:为什么 8.8.8.8 需要知道 unifi.home.molgaard.eu 的 IP 地址是什么?它解析为 RFC1918 地址,并且不需要,因为我使用不是。这意味着我证明我可以访问 DNS 服务器,而不是域的 Web 服务器。simply-credentialsdns01dns01 http-01


    – 

0