无法使用 Azure DNS 区域使用 Kubernetes 和 Letsencrypt 创建通配符 (*) 证书

Unable to create wildcard (*) Cert with Kubernetes and Letsencrypt using Azure DNS zone

我对 Kubernetes 很陌生。但到目前为止能够配置 AKS(Azure Kubernetes 服务)集群。我的服务有多个命名空间(Dev、stage、prod)。并使用 nginx 配置了一个 Ingress 服务(进入它自己的命名空间 'ingress-nginx')。该设置与 HTTP 完美配合。

当我尝试使用 HTTPS 时,我的问题就开始了。首先使用 this script. It has created it own namespace again: 'cert-manager' I was not using HELM just regular manifest. Also followed MS Azure DNS config.

安装证书管理器

一切似乎都是正确的我有我的服务、机密、clusterIssuer 等。甚至在 Azure DNS 区域中创建的挑战。你可以在 Azure 门户上看到它。但是我没有拿到任何证书。

ClusterIssuer 配置:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: 8b3s-org-letsencrypt
spec:
  acme:
    #server: https://acme-v02.api.letsencrypt.org/directory
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: <...@gmail.com>
    privateKeySecretRef:
      name: 8b3s-org-letsencrypt-key
    solvers:
    - selector:
      dns01:
        azuredns:
          clientID: ....
          clientSecretSecretRef:
          # The following is the secret we created in Kubernetes. Issuer will use this to present challenge to Azure DNS.
            name: azuredns-config
            key: client-secret
          subscriptionID: ....
          tenantID: "...."
          resourceGroupName: Web
          hostedZoneName: 8b3s.org
          # Azure Cloud Environment, default to AzurePublicCloud
          environment: AzurePublicCloud

入口配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: 8b3s-virtual-host-ingress
  namespace: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "8b3s-org-letsencrypt"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
     - '*.8b3s.org'
    secretName: 8b3s-org-letsencrypt-tls
  rules:
  - host: dev.8b3s.org
    http:
      paths:
      - path: /
        backend:
          serviceName: the8b3swebsite-development-ext
          servicePort: 8080

所以问题是每个配置看起来都不错,但根本没有证书。 我只有一个 'Opaque' ' tls.key: 1679 字节'作为 'cert-manager' 命名空间中的 '8b3s-org-letsencrypt-key'。

已为 'ingress-nginx' 名称空间“8b3s-org-letsencrypt-tls”创建了 证书,类型为 'kubernetes.io/tls'。但是 'ca.crt: 0 bytes' 和 'tls.crt: 0 bytes'.

我也在研究 cert-manager pods 输出。发现那 2 个日志很奇怪(如果需要我有完整的日志):

I0222 22:51:00.067791       1 acme.go:201] cert-manager/controller/certificaterequests-issuer-acme/sign "msg"="acme Order resource is not in a ready state, waiting..." "related_resource_kind"="Order" "related_resource_name"="8b3s-org-letsencrypt-tls-1807766204-3808299645" "related_resource_namespace"="ingress-nginx" "resource_kind"="CertificateRequest" "resource_name"="8b3s-org-letsencrypt-tls-1807766204" "resource_namespace"="ingress-nginx" 

I0222 22:51:00.068069       1 sync.go:129] cert-manager/controller/orders "msg"="Creating additional Challenge resources to complete Order" "resource_kind"="Order" "resource_name"="8b3s-org-letsencrypt-tls-1807766204-3808299645" "resource_namespace"="ingress-nginx" 

E0222 22:51:01.876182       1 sync.go:184] cert-manager/controller/challenges "msg"="propagation check failed" "error"="DNS record for \"8b3s.org\" not yet propagated" "dnsName"="8b3s.org" "resource_kind"="Challenge" "resource_name"="8b3s-org-letsencrypt-tls-1807766204-3808299645-481622463" "resource_namespace"="ingress-nginx" "type"="dns-01" 

知道问题出在哪里吗?

更新: 按照建议将 Azure NS 记录添加到我的域 DNS。等了一个小时左右,但没有任何效果......删除了现有的 CA 机密,重新启动了所有 Nginx,cert-manager Pods。并注意到以下错误:

E0225 10:14:03.671099       1 util.go:71] cert-manager/controller/certificaterequests/handleOwnedResource "msg"="error getting order referenced by resource" "error"="certificaterequest.cert-manager.io \"8b3s-org-letsencrypt-tls-1807766204\" not found" "related_resource_kind"="CertificateRequest" "related_resource_name"="8b3s-org-letsencrypt-tls-1807766204" "related_resource_namespace"="ingress-nginx" "resource_kind"="Order" "resource_name"="8b3s-org-letsencrypt-tls-1807766204-3808299645" "resource_namespace"="ingress-nginx" 
E0225 10:14:03.674679       1 util.go:71] cert-manager/controller/certificates/handleOwnedResource "msg"="error getting order referenced by resource" "error"="certificate.cert-manager.io \"8b3s-org-letsencrypt-tls\" not found" "related_resource_kind"="Certificate" "related_resource_name"="8b3s-org-letsencrypt-tls" "related_resource_namespace"="ingress-nginx" "resource_kind"="CertificateRequest" "resource_name"="8b3s-org-letsencrypt-tls-1807766204" "resource_namespace"="ingress-nginx" 

您域的 whois record 显示它仍然指向 NS57.DOMAINCONTROL.COM 而不是您在屏幕截图中显示的 4 个 Azure DNS 解析器。因此,Let's Encrypt 无法知道他们应该使用 Azure 来查找该 _acme-challenge 记录,但它失败了。