Установка cert-manager c плагином Yandex Cloud DNS ACME webhook
Важно
Функциональность доступна только в регионе Россия.
cert-manager
- DNS-01
. Для прохождения проверки используется сервис Yandex Cloud DNS. Вместе с cert-manager устанавливается плагин Yandex Cloud DNS ACME webhook, который обеспечивает интеграцию с сервисом. - HTTP-01
. Для прохождения проверки используется Ingress-контроллер, который нужно установить в кластер.
Примечание
Приложение cert-manager c плагином Yandex Cloud DNS ACME webhook поддерживает работу с Wildcard-сертификатами.
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Убедитесь, что кластер Managed Service for Kubernetes расположен в том же каталоге, что и публичная зона Cloud DNS.
-
Убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Установите kubectl
и настройте его на работу с созданным кластером. -
Создайте сервисный аккаунт, необходимый для работы cert-manager.
-
Назначьте сервисному аккаунту роль
dns.editor
на каталог, где расположена публичная зона DNS. -
Создайте авторизованный ключ для этого сервисного аккаунта и сохраните ключ в файл
key.json
.
Установка с помощью Yandex Cloud Marketplace
- Перейдите на страницу каталога
и выберите сервис Managed Service for Kubernetes. - Нажмите на имя нужного кластера Managed Service for Kubernetes и выберите вкладку
Marketplace. - В разделе Доступные для установки приложения выберите cert-manager c плагином Yandex Cloud DNS ACME webhook и нажмите кнопку Перейти к установке.
- Задайте настройки приложения:
- Пространство имен — выберите пространство имен или создайте новое.
- Название приложения — укажите название приложения, например,
cert-manager
. - Ключ сервисной учетной записи — вставьте содержимое файла
key.json
или создайте новый ключ. - ID каталога — укажите идентификатор каталога, в котором находится зона Cloud DNS, для подтверждения владением доменом при проверке DNS-01.
- Адрес электронной почты для получения уведомлений от Let's Encrypt — укажите адрес электронной почты для получения оповещений от Let's Encrypt®.
- Адрес сервера Let's Encrypt — выберите из списка адрес сервера Let's Encrypt®:
https://acme-v02.api.letsencrypt.org/directory
— основной URL.https://acme-staging-v02.api.letsencrypt.org/directory
— тестовый URL.
- Нажмите кнопку Установить.
- Дождитесь перехода приложения в статус
Deployed
.
Установка с помощью Helm-чарта
-
Установите менеджер пакетов Helm
версии не ниже 3.8.0. -
Установите kubectl
и настройте его на работу с созданным кластером. -
Для установки Helm-чарта
с cert-manager и плагином Yandex Cloud DNS выполните команду:helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/cert-manager-webhook-yandex/cert-manager-webhook-yandex \ --version 1.0.8-1 \ --untar && \ helm install \ --namespace <пространство_имен> \ --create-namespace \ --set-file config.auth.json=key.json \ --set config.email='<адрес_электронной_почты_для_уведомлений_от_Lets_Encrypt>' \ --set config.folder_id='<идентификатор_каталога_с_зоной_Cloud_DNS>' \ --set config.server='URL_сервера_Lets_Encrypt' \ cert-manager-webhook-yandex ./cert-manager-webhook-yandex/
В качестве URL сервера Let's Encrypt® используйте:
https://acme-v02.api.letsencrypt.org/directory
— основной URL.https://acme-staging-v02.api.letsencrypt.org/directory
— тестовый URL.
Эта команда также создаст новое пространство имен, необходимое для работы cert-manager.
Примечание
Если вы используете версию Helm ниже 3.8.0, добавьте в начало команды строку
export HELM_EXPERIMENTAL_OCI=1 && \
, чтобы включить поддержку Open Container Initiative (OCI) в клиенте Helm. -
Убедитесь, что под cert-manager перешел в состояние
Running
:kubectl get pods --namespace=<пространство_имен> -l app=cert-manager-webhook-yandex -w
Получение тестового сертификата
Чтобы проверить работоспособность установленного приложения, получите тестовый сертификат. Для выпуска сертификата будет использоваться эмитент yc-clusterissuer
. Он создается при установке cert-manager и уже настроен на работу с провайдером Let's Encrypt®.
-
Создайте файл
certificate.yaml
, содержащий запрос на тестовый сертификат:apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: domain-name namespace: <пространство_имен> spec: secretName: domain-name-secret issuerRef: # ClusterIssuer, созданный вместе с Yandex Cloud DNS ACME webhook. name: yc-clusterissuer kind: ClusterIssuer dnsNames: # Домен должен входить в вашу публичную зону Cloud DNS. # Указывается имя домена (например, test.example.com), а не имя DNS-записи. - <имя_домена>
-
Установите сертификат в кластер Managed Service for Kubernetes:
kubectl apply -f certificate.yaml
-
Проверьте готовность сертификата:
kubectl get certificate
Результат:
NAME READY SECRET AGE domain-name True domain-name-secret 45m
Статус
True
в колонкеREADY
означает, что сертификат был выпущен успешно. -
(Опционально) получите подробную информацию о сертификате:
kubectl -n <пространство_имен> describe certificate domain-name
В выводе команды будут содержаться подобные события (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 .Поскольку сертификат выпускается впервые, то соответствующий ему секрет отсутствует. Наличие событий, сообщающих об этом, не является ошибкой.
Примеры использования
- Проверка DNS Challenge для сертификатов Let's Encrypt®.
- Установка Ingress-контроллера NGINX с менеджером для сертификатов Let's Encrypt®.