Kubernetes Nginx Ingress с Cert Manager и letsencrypt не допускает подстановочных символов в доменных именах

У меня есть автономный кластер Kubernetes с Nginx Ingress. В кластере также работает Cert-manager, с помощью которого я пытаюсь получить действительные SSL-сертификаты с помощью Letsencrypt. Все работает, и я получаю действительный сертификат для example.com, www.example.com или app1.example.com, но не для общего подстановочного знака *.example.com. Если я попытаюсь каким-либо образом ввести подстановочный знак при входе в раздел sec.tls.hosts, мне не будет создан сертификат. Я получаю результат для

kubectl get certificate

      NAME              READY   SECRET            AGE
tls-test-cert     False   tls-electi-cert   20h

kubectl get CertificateRequest

      NAME                    APPROVED   DENIED   READY   ISSUER                REQUESTOR                                         AGE
tls-test-cert-8jw75     True                False   letsencrypt-staging   system:serviceaccount:cert-manager:cert-manager   18m

kubectl describe CertificateRequest

      [...]
Status:
  Conditions:
    Last Transition Time:  2022-02-27T13:54:38Z
    Message:               Certificate request has been approved by cert-manager.io
    Reason:                cert-manager.io
    Status:                True
    Type:                  Approved
    Last Transition Time:  2022-02-27T13:54:38Z
    Message:               Waiting on certificate issuance from order gateway/tls-test-cert-8jw75-1425588341: "pending"
    Reason:                Pending
    Status:                False
    Type:                  Ready
Events:
  Type    Reason           Age   From          Message
  ----    ------           ----  ----          -------
  Normal  cert-manager.io  18m   cert-manager  Certificate request has been approved by cert-manager.io
  Normal  OrderCreated     18m   cert-manager  Created Order resource gateway/tls-test-cert-8jw75-1425588341
  Normal  OrderPending     18m   cert-manager  Waiting on certificate issuance from order gateway/tls-test-cert-8jw75-1425588341: ""

Мой Nginx Ingress: (для этого поста я поменял свой домен на example.com)

      ---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-management
  namespace: gateway
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  ingressClassName: nginx
  tls:
  - secretName: tls-test-cert
    hosts:
      - example.com
      - '*.example.com'
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-gateway
                port:
                  number: 80
    - host: '*.example.com'
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-gateway
                port:
                  number: 80

Эмитент: (Я отредактировал свой адрес электронной почты здесь)

      apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: *******
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - http01:
          ingress:
            class: nginx

Мой обратный прокси (тест-шлюз) определенно работает и перенаправляет все поддомены на мой сайт. Заранее благодарим за любые идеи относительно того, что может быть причиной этого.

1 ответ

Спасибо за помощь, мне удалось решить мою проблему:

По сути, мне пришлось найти новый подход, поскольку с помощью http01 невозможно выдать сертификат wild card. (см. здесь: https://cert-manager.io/docs/configuration/acme/ ) После небольшого исследования я пришел к выводу, что наиболее разумно использовать решатель dns01. Документацию можно найти здесь: https://cert-manager.io/docs/configuration/acme/dns01/ .

Поскольку конфигурация dns01 сильно зависит от вашего DNS-провайдера, я не буду публиковать здесь свое решение, но полезную конфигурацию можно легко найти в документации.

Другие вопросы по тегам