Создание веб-хука резолвера ACME для ответов на DNS01-проверки
Чтобы автоматически проходить проверки прав на домен с использованием утилиты cert-manager
Ниже приведен пример создания объекта ClusterIssuer
с веб-хуком резолвера DNS01 для домена, зарегистрированного в Yandex Cloud DNS.
Чтобы запустить веб-хук в кластере Managed Service for Kubernetes:
- Подготовьте кластер Managed Service for Kubernetes к работе.
- Установите менеджер сертификатов последней версии.
- Установите менеджер пакетов Helm.
- Установите и запустите веб-хук в кластере Managed Service for Kubernetes.
- Удалите созданные ресурсы.
Примечание
Менеджер сертификатов с веб-хуком ACME для Yandex Cloud DNS поддерживает работу с Wildcard-сертификатами.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Подготовьте окружение
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Установите интерфейс командной строки Kubernetes — kubectl
. -
Убедитесь, что у вас достаточно свободных ресурсов в облаке.
-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.
-
-
sa-kubernetes
с ролями:k8s.clusters.agent
иvpc.publicAdmin
на каталог, в котором создается кластер Managed Service for Kubernetes.container-registry.images.puller
на каталог с реестром Docker-образов.
От имени этого сервисного аккаунта будут создаваться необходимые кластеру ресурсы, а узлы Managed Service for Kubernetes будут скачивать из реестра необходимые Docker-образы.
-
sa-dns-editor
с рольюdns.editor
на каталог с публичной зоной. От его имени будут создаваться ресурсные записи DNS.
-
Подготовьте кластер Managed Service for Kubernetes к работе
Создайте кластер Managed Service for Kubernetes
Чтобы создать кластер Managed Service for Kubernetes:
- В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Kubernetes. - Выберите сервис Managed Service for Kubernetes.
- Нажмите кнопку Создать кластер.
- Введите имя кластера:
kubernetes-cluster-wh
. - Сервисный аккаунт для ресурсов — укажите сервисный аккаунт
sa-kubernetes
, который будет использоваться для создания ресурсов. - Сервисный аккаунт для узлов — укажите сервисный аккаунт
sa-kubernetes
, который будет использоваться узлами Managed Service for Kubernetes для доступа к реестру Docker-образов. - Укажите релизный канал. Эту настройку невозможно изменить после создания кластера Managed Service for Kubernetes.
- В блоке Конфигурация мастера:
- Версия Kubernetes — выберите версию Kubernetes, которая будет установлена на мастере Managed Service for Kubernetes. Версия не должна отличаться от версии командной строки Kubernetes.
- Публичный адрес — выберите способ назначения IP-адреса:
Автоматически
— чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.
- Тип мастера — выберите тип мастера:
Зональный
— будет создан один хост-мастер в выбранной зоне доступности. Укажите облачную сеть и выберите в ней подсеть для размещения хоста-мастера.Региональный
— в каждой зоне доступности будет создано по одному хосту-мастеру. Укажите облачную сеть и подсеть для каждой зоны доступности.
- Выберите группы безопасности для сетевого трафика кластера Managed Service for Kubernetes.
- В блоке Сетевые настройки кластера:
- Нажмите кнопку Создать.
- Дождитесь, когда статус кластера изменится на
Running
, а состояние наHealthy
.
Добавьте учетные данные в конфигурационный файл kubectl
Чтобы добавить учетные данные кластера Managed Service for Kubernetes в конфигурационный файл kubectl:
-
Выполните команду:
yc managed-kubernetes cluster get-credentials kubernetes-cluster-wh --external
По умолчанию учетные данные добавляются в директорию
$HOME/.kube/config
. Если необходимо изменить расположение конфигураций, используйте флаг--kubeconfig <путь_к_файлу>
. -
Проверьте конфигурацию kubectl после добавления учетных данных:
kubectl config view
Результат:
apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED ...
Создайте группу узлов
Чтобы создать группу узлов Managed Service for Kubernetes:
-
В консоли управления
выберите каталог, в котором создан нужный кластер Managed Service for Kubernetes. -
В списке сервисов выберите Managed Service for Kubernetes.
-
Выберите кластер
kubernetes-cluster-wh
. -
На странице кластера перейдите на вкладку
Управление узлами. -
Нажмите кнопку Создать группу узлов.
-
Введите имя и описание группы узлов Managed Service for Kubernetes.
-
В поле Версия Kubernetes выберите версию Kubernetes для узлов Managed Service for Kubernetes.
-
В блоке Масштабирование выберите его тип:
Фиксированный
, чтобы количество узлов в группе Managed Service for Kubernetes оставалось неизменным. Укажите количество узлов в группе Managed Service for Kubernetes.Автоматический
, чтобы управлять количеством узлов в группе Managed Service for Kubernetes с помощью автоматического масштабирования кластера Managed Service for Kubernetes.
-
В блоке В процессе создания и обновления разрешено укажите максимальное количество виртуальных машин, на которое можно превысить и уменьшить размер группы Managed Service for Kubernetes.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и гарантированную долю vCPU, а также объем RAM.
-
В блоке Хранилище:
-
Укажите Тип диска для узлов группы Managed Service for Kubernetes:
HDD
— стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе.SSD
— быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе.Нереплицируемый SSD
— сетевой диск с повышенной производительностью, реализованной за счет устранения избыточности. Размер такого диска можно менять только с шагом 93 ГБ.SSD IO
— обладает теми же скоростными характеристиками, что иНереплицируемый SSD
, и одновременно обеспечивает избыточность. Размер такого диска можно менять только с шагом 93 ГБ.
Подробнее о типах дисков см. в документации Yandex Compute Cloud.
-
Укажите размер дисков для узлов группы Managed Service for Kubernetes.
-
-
В блоке Сетевые настройки:
- В поле Публичный адрес выберите способ назначения IP-адреса:
Автоматически
— чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.
- Выберите группы безопасности.
- Выберите зону доступности и подсеть для размещения узлов группы Managed Service for Kubernetes.
- В поле Публичный адрес выберите способ назначения IP-адреса:
-
В блоке Доступ укажите данные для доступа к узлам группы Managed Service for Kubernetes по SSH:
- Логин — укажите имя пользователя.
- SSH-ключ — вставьте содержимое файла публичного ключа.
-
Нажмите кнопку Создать.
-
Дождитесь, когда статус группы узлов изменится на
Running
.
Установите менеджер сертификатов последней версии
-
Установите актуальную версию
менеджера сертификатов, настроенного для выпуска сертификатов от Let's Encrypt. Например, для версии 1.21.1 выполните команду:kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.1/cert-manager.yaml
-
Убедитесь, что в пространстве имен
cert-manager
создано три пода с готовностью1/1
и статусомRunning
:kubectl get pods -n cert-manager --watch
Результат:
NAME READY STATUS RESTARTS AGE cert-manager-69********-ghw6s 1/1 Running 0 54s cert-manager-cainjector-76********-gnrzz 1/1 Running 0 55s cert-manager-webhook-77********-wz9bh 1/1 Running 0 54s
Установите менеджер пакетов Helm
Установите менеджер пакетов Helm
Установите и запустите веб-хук в кластере Managed Service for Kubernetes
Установите веб-хук
-
Клонируйте репозиторий веб-хука:
git clone https://github.com/yandex-cloud/cert-manager-webhook-yandex.git
-
Установите веб-хук с помощью Helm:
helm install -n cert-manager yandex-webhook ./deploy/cert-manager-webhook-yandex
Подготовьте конфигурационные файлы
-
Создайте авторизованный ключ для сервисного аккаунта
sa-dns-editor
и сохраните его в файлiamkey.json
:yc iam key create iamkey \ --service-account-id=<идентификатор_сервисного_аккаунта> \ --format=json \ --output=iamkey.json
-
Создайте секрет с ключом сервисного аккаунта:
kubectl create secret generic cert-manager-secret --from-file=iamkey.json -n cert-manager
-
Создайте файл
cluster-issuer.yml
с манифестом объектаClusterIssuer
:apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: clusterissuer namespace: default spec: acme: # You must replace this email address with your own. # Let's Encrypt will use this to contact you about expiring # certificates, and issues related to your account. email: your@email.com server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: # Secret resource that will be used to store the account's private key. name: secret-ref solvers: - dns01: webhook: config: # The ID of the folder where dns-zone located in folder: <идентификатор_каталога> # This is the secret used to access the service account serviceAccountSecretRef: name: cert-manager-secret key: iamkey.json groupName: acme.cloud.yandex.com solverName: yandex-cloud-dns
-
Создайте файл
cluster-certificate.yml
с манифестом объектаCertificate
:apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: your-site-com namespace: default spec: secretName: example-com-secret issuerRef: # The issuer created previously name: clusterissuer kind: ClusterIssuer dnsNames: - your-site.com
Запустите менеджер сертификатов с веб-хуком
-
Создайте объекты в кластере Kubernetes:
kubectl apply -f cluster-issuer.yml && \ kubectl apply -f cluster-certificate.yml
-
Убедитесь, что веб-хук запущен:
kubectl get pods -n cert-manager --watch
Проверьте, что среди записей присутствует веб-хук ACME для Yandex Cloud DNS:
NAME READY STATUS RESTARTS AGE ... yandex-webhook-cert-manager-webhook-yandex-5578cfb98-tw4mq 1/1 Running 1 43h
Удалите созданные ресурсы
Если созданные ресурсы вам больше не нужны, удалите кластер Managed Service for Kubernetes.