Проверка DNS Challenge для сертификатов Let's Encrypt®
Чтобы добавить возможность пройти проверку DNS Challenge при выписывании сертификатов Let's Encrypt®:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте сервисный аккаунт с ролью
dns.editor
на каталог, в котором будет находиться доменная зона. -
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в виде JSON-файла:
yc iam key create \ --service-account-name <имя_сервисного_аккаунта> \ --format json \ --output key.json
-
Зарегистрируйте публичную доменную зону и делегируйте домен. Сертификат Let's Encrypt® будет выписан для домена в этой зоне с прохождением проверки DNS-01
. -
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите группы безопасности, подготовленные ранее.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Создайте сертификат
-
Установите приложение cert-manager c плагином Yandex Cloud DNS ACME webhook по инструкции.
При установке укажите сервисный аккаунт и авторизованный ключ, которые были созданы перед началом работы.
-
Создайте файл
certificate.yaml
:apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-com namespace: default spec: secretName: example-com-secret issuerRef: # The issuer created previously name: yc-clusterissuer kind: ClusterIssuer dnsNames: - <доменное_имя>
-
Передайте сертификат в кластер Managed Service for Kubernetes:
kubectl apply -f certificate.yaml
Проверьте результат
-
Проверьте готовность сертификата:
kubectl get certificate example-com
Результат:
NAME READY SECRET AGE example-com True example-com-secret 24h
Статус
True
в колонкеREADY
означает, что сертификат был выпущен успешно. -
(Опционально) получите подробную информацию о сертификате:
kubectl -n default describe certificate example-com
В выводе команды будут содержаться подобные события (events):
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Issuing ... cert-manager-certificates-trigger Issuing certificate as Secret does not exist Normal Generated ... cert-manager-certificates-key-manager Stored new private key in temporary Secret resource...
Сертификаты используются в связке с соответствующими им секретами Kubernetes
, которые хранят пары ключей и служебную информацию. В случае отсутствия секрета сертификат перевыпускается автоматически с созданием нового секрета, о чем и сообщается в событиях. Подробнее о причинах, которые могут привести к перевыпуску сертификата, см. в документации cert-manager .Поскольку сертификат выпускается впервые, то соответствующий ему секрет отсутствует. Наличие событий, сообщающих об этом, не является ошибкой.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать: