cert-manager Webhook используется для автоматического создания DNS-записей при валидации домена с помощью метода DNS-01.
Для корректной работы дополнения необходимо, чтобы:
Установите дополнение cert-manager Webhook через панель управления Kubernetes в разделе «Дополнения».
После установки убедитесь, что запущен под, отвечающий за DNS01-валидацию:
kubectl get pods -n cert-manager -l app=cert-manager-webhook-timeweb-cloud
У пода должен быть статус Running
.
Чтобы cert-manager мог выпускать сертификаты, необходимо создать объект ClusterIssuer
. Он описывает, каким способом и через какого провайдера cert-manager будет выполнять валидацию доменов и получать сертификаты. Объект ClusterIssuer
действует на уровне всего кластера и может использоваться из любых namespace'ов.
Создайте файл cluster-issuer.yaml
:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: email@example.com # Укажите вашу почту
privateKeySecretRef:
name: letsencrypt-dns-account-key
solvers:
- dns01:
webhook:
groupName: twcloud-<ID_кластера> # Укажите ID вашего кластера
solverName: twcloud-dns
Значение privateKeySecretRef
указывает, где будет храниться ключ учетной записи, с помощью которой cert-manager взаимодействует с Let's Encrypt.
Параметр groupName
обязательно должен содержать ID вашего кластера. Его можно посмотреть в адресной строке браузера при открытии страницы управления кластером.
Примените манифест:
kubectl apply -f cluster-issuer.yaml
Создайте файл certificate.yaml
:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com-tls
namespace: default
spec:
secretName: example-com-tls
issuerRef:
name: letsencrypt-dns
kind: ClusterIssuer
dnsNames:
- example.com
- www.example.com
Замените домены на свои и примените манифест:
kubectl apply -f certificate.yaml
Проверить текущий статус выпуска сертификата можно так:
kubectl get certificaterequests,orders,challenges -n default
При успешном выпуске сертификата вы увидите примерно следующее:
NAME APPROVED DENIED READY ISSUER REQUESTER AGE
certificaterequest.cert-manager.io/example-com-tls-1 True True letsencrypt-dns system:serviceaccount:cert-manager:cert-manager 91s
NAME STATE AGE
order.acme.cert-manager.io/example-com-tls-1-1905819700 valid 91s
После успешного выпуска проверьте, что секрет с сертификатом создан:
kubectl get secret example-com-tls -n default -o yaml
Секрет будет содержать ключи tls.crt
и tls.key
.