Невозможно создать подстановочный знак (*) Cert с Kubernetes и Letsencrypt, используя Azure DNS-зону - PullRequest
1 голос
/ 24 февраля 2020

Я совершенно новичок в Кубернетесе. Но до сих пор удалось настроить кластер AKS (Azure Kubernetes Services). У меня есть несколько пространств имен для моих услуг (Dev, stage, prod). И настроил службу Ingress, используя nginx ( в собственное пространство имен 'ingress- nginx' ). Настройка отлично работает с HTTP.

Мои проблемы начались, когда я попытался использовать HTTPS. Сначала установите cert-manager, используя этот скрипт. Он снова создал свое собственное пространство имен: 'cert-manager' Я не использовал HELM, просто обычный манифест . Также следуют MS Azure DNS config .

Все кажется правильным У меня есть свои службы, секреты, clusterIssuer и др. c. Даже вызов создан в Azure DNS Zone. Вы можете увидеть это на портале Azure. Но я не получил никакого сертификата.

enter image description here

Конфигурация 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

Так что проблема в том, что каждый конфиг выглядит нормально, но сертификата нет вообще. Я получил только «непрозрачный» tls.key: 1679 байт в качестве «8b3s-org-letsencrypt-key» в пространстве имен «cert-manager».

enter image description here

Сертификат создан для пространств имен 'ingress- nginx' 8b3s-org-letsencrypt-tls как тип 'kubernetes.io/tls'. Но 'ca.crt: 0 байтов' и 'tls.crt: 0 байтов' .

enter image description here

Я также изучал сертификат менеджер выводит вывод. Обнаружил эти 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. И заметил следующую ошибку:

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" 

1 Ответ

1 голос
/ 25 февраля 2020

Запись whois для вашего домена показывает, что он по-прежнему указывает на NS57.DOMAINCONTROL.COM, а не на преобразователи DNS 4 Azure, которые вы видите на своем скриншоте. Таким образом, Let's Encrypt не может знать, что они должны использовать Azure для поиска этой _acme-challenge записи, и это не удается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...