cert-manager Letsencrypt сертификат показывает cert-manager.local в браузере

Вопрос или проблема

После получения сертификата от выпускателя

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # URL ACME-сервера
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    # Адрес электронной почты, используемый для регистрации в ACME
    email: [email protected]
    # Имя секрета, используемого для хранения закрытого ключа учетной записи ACME
    privateKeySecretRef:
      name: letsencrypt-staging
    # Включить провайдер проверки HTTP-01
    solvers:
      - http01:
          ingress:
            ingressClassName: haproxy

kubectl get certificate -o wide

NAME                  READY   SECRET                ISSUER                STATUS                                          AGE
dallasoft-nginx-tls   True    dallasoft-nginx-tls   letsencrypt-staging   Сертификат актуален и не истек                 10m

Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mydomain-nginx-ingress
  annotations:
    cert-manager.io/issuer: "letsencrypt-staging"
spec:
  ingressClassName: haproxy
  tls:
  - hosts:
    - mydomain.com
    secretName: mydomain-nginx-tls  # Настройте в соответствии с именем вашего секрета сертификата
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /nginx
        pathType: Prefix
        backend:
          service:
            name: nginx  # Убедитесь, что это соответствует имени вашего сервиса Nginx
            port:
              number: 80

Когда открываю mydomain.com/nginx в браузере, сертификат с именем выпускателя:

cert-manager.local

Как сделать так, чтобы браузер распознавал ssl сертификат?

Ответ или решение

Проблема, с которой вы столкнулись — отображение имени cert-manager.local вместо фактического доменного имени mydomain.com при доступе к вашему сервису через браузер. Эта проблема возникает из-за нескольких возможных факторов, связанных с конфигурацией cert-manager и Ingress. Давайте рассмотрим шаги, которые помогут вам решить эту проблему.

1. Проверьте конфигурацию Issuer и Certificate

Убедитесь, что ваш Issuer и Certificate правильно настроены:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: mydomain-nginx-tls
spec:
  secretName: mydomain-nginx-tls
  issuerRef:
    name: letsencrypt-staging
    kind: Issuer
  commonName: mydomain.com
  dnsNames:
    - mydomain.com

Обратите внимание на поля commonName и dnsNames, которые должны содержать ваше фактическое доменное имя.

2. Проверьте Ingress

Ваша конфигурация Ingress кажется корректной, однако убедитесь, что вы правильно указали доменное имя в правилах и что Ingress действительно связан с вашим сервисом. Однако необходимо еще раз убедиться, что secretName совпадает с тем, что вы указали в Certificate.

Вот скорректированный пример:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mydomain-nginx-ingress
  annotations:
    cert-manager.io/issuer: "letsencrypt-staging"
spec:
  ingressClassName: haproxy
  tls:
  - hosts:
    - mydomain.com
    secretName: mydomain-nginx-tls  # Убедитесь, что это соответствует имени секрета вашего сертификата
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /nginx
        pathType: Prefix
        backend:
          service:
            name: nginx  # Убедитесь, что это название вашего сервиса
            port:
              number: 80

3. Перезапустите Cert-Manager

Иногда cert-manager может закэшировать некоторые значения. Попробуйте удалить старый сертификат и запустить процесс получения нового сертификата:

kubectl delete certificate mydomain-nginx-tls

После этого cert-manager должен автоматически попытаться получить новый сертификат.

4. Проверьте Логи

Проверьте логи cert-manager для получения информации о возможных ошибках:

kubectl logs -l app=cert-manager -n cert-manager

Это может дать подсказки о том, что пошло не так.

5. DNS Настройки

Убедитесь, что DNS-запись для mydomain.com правильно указывает на ваш Ingress-контроллер. Если DNS не настроен, Let’s Encrypt не сможет подтвердить владение доменом, что может привести к получению сертификата с ошибками.

6. Использование ACME Production Server

Сейчас вы используете тестовый сервер (https://acme-staging-v02.api.letsencrypt.org/directory). После успешного тестирования сертификатов вам стоит переключиться на производственный сервер:

server: https://acme-v02.api.letsencrypt.org/directory

Заключение

Следуя этим шагам, вы сможете устранить проблему с отображением cert-manager.local вместо вашего доменного имени. Обязательно убедитесь, что все конфигурации правильны и соответствуют друг другу, а также проверьте доступность вашего домена через DNS, поскольку это критически важно для успешного получения сертификатов от Let’s Encrypt.

Оцените материал
Добавить комментарий

Капча загружается...