Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
    • Использование модулей Yandex Cloud в Terraform
    • Шифрование секретов в Managed Service for Kubernetes
      • Интеграция с корпоративной зоной DNS
      • Автоматическое масштабирование DNS по размеру кластера
      • Настройка NodeLocal DNS Cache
      • Проверка DNS Challenge для сертификатов Let's Encrypt®
      • Создание веб-хука резолвера ACME для ответов на DNS01-проверки
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Подготовьте кластер Managed Service for Kubernetes к работе
  • Создайте кластер Managed Service for Kubernetes
  • Добавьте учетные данные в конфигурационный файл kubectl
  • Создайте группу узлов
  • Установите менеджер сертификатов последней версии
  • Установите менеджер пакетов Helm
  • Установите и запустите веб-хук в кластере Managed Service for Kubernetes
  • Установите веб-хук
  • Подготовьте конфигурационные файлы
  • Запустите менеджер сертификатов с веб-хуком
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Работа с DNS
  3. Создание веб-хука резолвера ACME для ответов на DNS01-проверки

Создание веб-хука резолвера ACME для ответов на DNS01-проверки

Статья создана
Yandex Cloud
Обновлена 21 апреля 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте окружение
  • Подготовьте кластер Managed Service for Kubernetes к работе
    • Создайте кластер Managed Service for Kubernetes
    • Добавьте учетные данные в конфигурационный файл kubectl
    • Создайте группу узлов
  • Установите менеджер сертификатов последней версии
  • Установите менеджер пакетов Helm
  • Установите и запустите веб-хук в кластере Managed Service for Kubernetes
    • Установите веб-хук
    • Подготовьте конфигурационные файлы
    • Запустите менеджер сертификатов с веб-хуком
  • Удалите созданные ресурсы

Чтобы автоматически проходить проверки прав на домен с использованием утилиты cert-manager, добавьте веб-хук с резолвером DNS01 в конфигурацию утилиты.

Ниже приведен пример создания объекта ClusterIssuer с веб-хуком резолвера DNS01 для домена, зарегистрированного в Yandex Cloud DNS.

Чтобы запустить веб-хук в кластере Managed Service for Kubernetes:

  1. Подготовьте кластер Managed Service for Kubernetes к работе.
  2. Установите менеджер сертификатов последней версии.
  3. Установите менеджер пакетов Helm.
  4. Установите и запустите веб-хук в кластере Managed Service for Kubernetes.
  5. Удалите созданные ресурсы.

Примечание

Менеджер сертификатов с веб-хуком ACME для Yandex Cloud DNS поддерживает работу с Wildcard-сертификатами.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес для узлов кластера (см. тарифы Virtual Private Cloud).

Подготовьте окружениеПодготовьте окружение

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

  2. Установите интерфейс командной строки Kubernetes — kubectl.

  3. Убедитесь, что у вас достаточно свободных ресурсов в облаке.

  4. Если у вас еще нет сети, создайте ее.

  5. Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.

  6. Создайте сервисные аккаунты:

    • 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:

Консоль управления
  1. В консоли управления выберите каталог, в котором нужно создать кластер Managed Service for Kubernetes.
  2. Выберите сервис Managed Service for Kubernetes.
  3. Нажмите кнопку Создать кластер.
  4. Введите имя кластера: kubernetes-cluster-wh.
  5. Сервисный аккаунт для ресурсов — укажите сервисный аккаунт sa-kubernetes, который будет использоваться для создания ресурсов.
  6. Сервисный аккаунт для узлов — укажите сервисный аккаунт sa-kubernetes, который будет использоваться узлами Managed Service for Kubernetes для доступа к реестру Docker-образов.
  7. Укажите релизный канал. Эту настройку невозможно изменить после создания кластера Managed Service for Kubernetes.
  8. В блоке Конфигурация мастера:
    • Версия Kubernetes — выберите версию Kubernetes, которая будет установлена на мастере Managed Service for Kubernetes. Версия не должна отличаться от версии командной строки Kubernetes.
    • Публичный адрес — выберите способ назначения IP-адреса:
      • Автоматически — чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.
    • Тип мастера — выберите тип мастера:
      • Базовый — будет создан один хост-мастер в выбранной зоне доступности. Укажите облачную сеть и выберите в ней подсеть для размещения хоста-мастера.
      • Высокодоступный — в каждой зоне доступности будет создано по одному хосту-мастеру. Укажите облачную сеть и подсеть для каждой зоны доступности.
    • Выберите группы безопасности для сетевого трафика кластера Managed Service for Kubernetes.
  9. В блоке Сетевые настройки кластера:
    • CIDR кластера — укажите диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.
    • CIDR сервисов — укажите диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.
    • Задайте маску подсети узлов Managed Service for Kubernetes и максимальное количество подов в узле.
  10. Нажмите кнопку Создать.
  11. Дождитесь, когда статус кластера изменится на Running, а состояние на Healthy.

Добавьте учетные данные в конфигурационный файл kubectlДобавьте учетные данные в конфигурационный файл kubectl

Чтобы добавить учетные данные кластера Managed Service for Kubernetes в конфигурационный файл kubectl:

CLI
  1. Выполните команду:

    yc managed-kubernetes cluster get-credentials kubernetes-cluster-wh --external
    

    По умолчанию учетные данные добавляются в директорию $HOME/.kube/config. Если необходимо изменить расположение конфигураций, используйте флаг --kubeconfig <путь_к_файлу>.

  2. Проверьте конфигурацию kubectl после добавления учетных данных:

    kubectl config view
    

    Результат:

    apiVersion: v1
    clusters:
      - cluster:
        certificate-authority-data: DATA+OMITTED
    ...
    

Создайте группу узловСоздайте группу узлов

Чтобы создать группу узлов Managed Service for Kubernetes:

Консоль управления
  1. В консоли управления выберите каталог, в котором создан нужный кластер Managed Service for Kubernetes.

  2. В списке сервисов выберите Managed Service for Kubernetes.

  3. Выберите кластер kubernetes-cluster-wh.

  4. На странице кластера перейдите на вкладку Управление узлами.

  5. Нажмите кнопку Создать группу узлов.

  6. Введите имя и описание группы узлов Managed Service for Kubernetes.

  7. В поле Версия Kubernetes выберите версию Kubernetes для узлов Managed Service for Kubernetes.

  8. В блоке Масштабирование выберите его тип:

    • Фиксированный, чтобы количество узлов в группе Managed Service for Kubernetes оставалось неизменным. Укажите количество узлов в группе Managed Service for Kubernetes.
    • Автоматический, чтобы управлять количеством узлов в группе Managed Service for Kubernetes с помощью автоматического масштабирования кластера Managed Service for Kubernetes.
  9. В блоке В процессе создания и обновления разрешено укажите максимальное количество виртуальных машин, на которое можно превысить и уменьшить размер группы Managed Service for Kubernetes.

  10. В блоке Вычислительные ресурсы:

    • Выберите платформу.
    • Укажите необходимое количество vCPU и гарантированную долю vCPU, а также объем RAM.
  11. В блоке Хранилище:

    • Укажите Тип диска для узлов группы Managed Service for Kubernetes:

      • HDD — стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе.
      • SSD — быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе.
      • Нереплицируемый SSD — сетевой диск с повышенной производительностью, реализованной за счет устранения избыточности. Размер такого диска можно менять только с шагом 93 ГБ.
      • SSD IO — обладает теми же скоростными характеристиками, что и Нереплицируемый SSD, и одновременно обеспечивает избыточность. Размер такого диска можно менять только с шагом 93 ГБ.

      Подробнее о типах дисков см. в документации Yandex Compute Cloud.

    • Укажите размер дисков для узлов группы Managed Service for Kubernetes.

  12. В блоке Сетевые настройки:

    • В поле Публичный адрес выберите способ назначения IP-адреса:
      • Автоматически — чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.
    • Выберите группы безопасности.
    • Выберите зону доступности и подсеть для размещения узлов группы Managed Service for Kubernetes.
  13. В блоке Доступ укажите данные для доступа к узлам группы Managed Service for Kubernetes по SSH:

    • Логин — укажите имя пользователя.
    • SSH-ключ — вставьте содержимое файла публичного ключа.
  14. Нажмите кнопку Создать.

  15. Дождитесь, когда статус группы узлов изменится на Running.

Установите менеджер сертификатов последней версииУстановите менеджер сертификатов последней версии

  1. Установите актуальную версию менеджера сертификатов, настроенного для выпуска сертификатов от Let's Encrypt. Например, для версии 1.21.1 выполните команду:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.1/cert-manager.yaml
    
  2. Убедитесь, что в пространстве имен 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

Установите менеджер пакетов Helm для управления пакетами на вашем кластере Kubernetes.

Установите и запустите веб-хук в кластере Managed Service for KubernetesУстановите и запустите веб-хук в кластере Managed Service for Kubernetes

Установите веб-хукУстановите веб-хук

  1. Клонируйте репозиторий веб-хука:

    git clone https://github.com/yandex-cloud/cert-manager-webhook-yandex.git
    
  2. Установите веб-хук с помощью Helm:

    helm install -n cert-manager yandex-webhook ./deploy/cert-manager-webhook-yandex
    

Подготовьте конфигурационные файлыПодготовьте конфигурационные файлы

  1. Создайте авторизованный ключ для сервисного аккаунта sa-dns-editor и сохраните его в файл iamkey.json:

    yc iam key create iamkey \
      --service-account-id=<идентификатор_сервисного_аккаунта> \
      --format=json \
      --output=iamkey.json
    
  2. Создайте секрет с ключом сервисного аккаунта:

    kubectl create secret generic cert-manager-secret --from-file=iamkey.json -n cert-manager
    
  3. Создайте файл 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
    
  4. Создайте файл 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
    

Запустите менеджер сертификатов с веб-хукомЗапустите менеджер сертификатов с веб-хуком

  1. Создайте объекты в кластере Kubernetes:

    kubectl apply -f cluster-issuer.yml && \
    kubectl apply -f cluster-certificate.yml
    
  2. Убедитесь, что веб-хук запущен:

    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.

Была ли статья полезна?

Предыдущая
Проверка DNS Challenge для сертификатов Let's Encrypt®
Следующая
Резервное копирование в Object Storage
Проект Яндекса
© 2025 ООО «Яндекс.Облако»