Вопрос или проблема
После получения сертификата от выпускателя
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.