Создание веб-хука резолвера ACME для ответов на DNS01-проверки
Чтобы автоматически проходить проверки прав на домен, зарегистрированный в Yandex Cloud DNS, установите приложение cert-manager
Чтобы запустить веб-хук в кластере Managed Service for Kubernetes:
- Подготовьте кластер Managed Service for Kubernetes к работе.
- Установите и запустите веб-хук в кластере Managed Service for Kubernetes.
- Проверьте работу веб-хука.
- Удалите созданные ресурсы.
Примечание
Менеджер сертификатов с веб-хуком ACME для Yandex Cloud DNS поддерживает работу с Wildcard-сертификатами.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
- Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
- Плата за публичный IP-адрес для узлов кластера (см. тарифы Virtual Private Cloud).
Подготовьте окружение
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
Установите интерфейс командной строки 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 и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Добавьте в группы безопасности следующие правила:
- В группу безопасности кластера добавьте правило для исходящего трафика, которое разрешает проверку сертификатов через веб-хук cert-manager:
- Диапазон портов —
10250. - Протокол —
TCP. - Назначение —
CIDR. - CIDR блоки —
0.0.0.0/0.
- Диапазон портов —
- В группу безопасности группы узлов добавьте правило для исходящего трафика, которое разрешает подключение к серверам Let's Encrypt® для выпуска сертификатов:
- Диапазон портов —
443. - Протокол —
TCP. - Назначение —
CIDR. - CIDR блоки —
0.0.0.0/0.
- Диапазон портов —
- В группу безопасности кластера добавьте правило для исходящего трафика, которое разрешает проверку сертификатов через веб-хук cert-manager:
Подготовьте кластер 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
-
Выполните команду:
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.
-
Выберите кластер
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.
Установите и запустите веб-хук в кластере Managed Service for Kubernetes
-
Клонируйте репозиторий веб-хука с менеджером сертификатов, настроенным для выпуска сертификатов от Let's Encrypt:
git clone https://github.com/yandex-cloud/cert-manager-webhook-yandex.git -
Установите менеджер пакетов Helm
для управления пакетами в вашем кластере Kubernetes. -
Установите веб-хук с помощью Helm:
helm install \ --namespace cert-manager \ --create-namespace \ yandex-webhook ./cert-manager-webhook-yandex/deploy/cert-manager-webhook-yandex -
Убедитесь, что веб-хук запущен:
kubectl get pods -n cert-manager --watchПроверьте, что среди записей присутствует веб-хук ACME для Yandex Cloud DNS:
NAME READY STATUS RESTARTS AGE ... yandex-webhook-cert-manager-webhook-yandex-55********-tw4mq 1/1 Running 1 43m
Проверьте работу веб-хука
Подготовьте конфигурационные файлы
-
Создайте авторизованный ключ для сервисного аккаунта
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, в котором используется веб-хук резолвера DNS01 для домена Cloud DNS:apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: clusterissuer namespace: default spec: acme: email: <адрес_электронной_почты_для_уведомлений_от_Lets_Encrypt> server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: secret-ref solvers: - dns01: webhook: config: folder: <идентификатор_каталога_с_публичной_зоной> 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 namespace: default spec: secretName: your-site-secret issuerRef: name: clusterissuer kind: ClusterIssuer dnsNames: - <имя_домена>
Выпустите сертификат с помощью веб-хука
-
Создайте объекты в кластере Kubernetes:
kubectl apply -f cluster-issuer.yml && \ kubectl apply -f cluster-certificate.yml -
Проверьте готовность сертификата:
kubectl get certificateРезультат:
NAME READY SECRET AGE your-site True your-site-secret 45mСтатус
Trueв колонкеREADYозначает, что сертификат был выпущен успешно.
Удалите созданные ресурсы
Если созданные ресурсы вам больше не нужны, удалите кластер Managed Service for Kubernetes.