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
      • Установка Ingress-контроллера NGINX с Let's Encrypt®
      • Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Ingress-контроллер NGINX
  • Настройте DNS-запись для Ingress-контроллера
  • Установите менеджер сертификатов
  • Создайте ClusterIssuer
  • Создайте объекты для проверки работы cert-manager
  • Проверьте работоспособность TLS
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Установка NGINX
  3. Установка Ingress-контроллера NGINX с Let's Encrypt®

Установка Ingress-контроллера NGINX с менеджером для сертификатов Let's Encrypt®

Статья создана
Yandex Cloud
Обновлена 28 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Ingress-контроллер NGINX
  • Настройте DNS-запись для Ingress-контроллера
  • Установите менеджер сертификатов
  • Создайте ClusterIssuer
  • Создайте объекты для проверки работы cert-manager
  • Проверьте работоспособность TLS
  • Удалите созданные ресурсы

Чтобы с помощью Kubernetes создать Ingress-контроллер NGINX и защитить его сертификатом:

  1. Установите Ingress-контроллер NGINX.
  2. Настройте DNS-запись для Ingress-контроллера.
  3. Установите менеджер сертификатов.
  4. Создайте ClusterIssuer.
  5. Создайте объекты для проверки работы cert-manager.
  6. Проверьте работоспособность TLS.

Если созданные ресурсы вам больше не нужны, удалите их.

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

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

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

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

  1. Создайте сервисный аккаунт с ролями k8s.clusters.agent, vpc.publicAdmin, container-registry.images.puller и load-balancer.admin на каталог. Роль load-balancer.admin нужна для создания сетевого балансировщика нагрузки.

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

    Важно

    От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

  3. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. В настройках кластера укажите сервисный аккаунт и группы безопасности, созданные ранее.

  4. Установите kubectl и настройте его на работу с созданным кластером.

  5. Зарегистрируйте публичную доменную зону и делегируйте домен.

  6. (Опционально) Установите ExternalDNS c плагином для Yandex Cloud DNS, чтобы автоматически создать DNS-запись в Yandex Cloud DNS при создании Ingress-контроллера.

Установите Ingress-контроллер NGINXУстановите Ingress-контроллер NGINX

Yandex Cloud Marketplace
Вручную

Установите приложение Ingress NGINX из Cloud Marketplace по инструкции.

  1. Установите менеджер пакетов Kubernetes Helm.

  2. Для установки Helm-чарта с Ingress-контроллером NGINX выполните команду:

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && \
    helm repo update && \
    helm install ingress-nginx ingress-nginx/ingress-nginx
    

Созданный контроллер будет установлен за Yandex Network Load Balancer.

Чтобы настроить конфигурацию контроллера самостоятельно, обратитесь к документации Helm и отредактируйте файл values.yaml.

Чтобы пробросить определенные порты при установке Ingress-контроллера NGINX, следуйте инструкции.

Настройте DNS-запись для Ingress-контроллераНастройте DNS-запись для Ingress-контроллера

Если вы используете ExternalDNS c плагином для Cloud DNS, настраивать DNS-запись не нужно — она создается автоматически. В противном случае:

  1. Узнайте IP-адрес Ingress-контроллера (значение в колонке EXTERNAL-IP):

    kubectl get svc
    

    Результат:

    NAME                      TYPE          CLUSTER-IP     EXTERNAL-IP     PORT(S)                     AGE
    ...
    ingress-nginx-controller  LoadBalancer  10.96.164.252  84.201.153.122  80:31248/TCP,443:31151/TCP  2m19s
    ...
    
  2. Разместите у своего DNS-провайдера или на собственном DNS-сервере A-запись, указывающую на публичный IP-адрес Ingress-контроллера:

    <ваш_домен> IN A <IP-адрес_Ingress-контроллера>
    

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

Вы можете установить менеджер сертификатов одним из способов:

  • С помощью Yandex Cloud Marketplace: будет установлен cert-manager, интегрированный с сервисом Cloud DNS.

    В кластере будет создан объект ClusterIssuer, настроенный на прохождение проверки DNS-01 с помощью Cloud DNS.

    При необходимости можно вручную создать и настроить другие объекты: Issuer или ClusterIssuer. Подробнее об этих объектах см. в документации cert-manager.

  • Вручную: будет установлен cert-manager без дополнительных интеграций.

    Любые объекты Issuer и ClusterIssuer потребуется создать и настроить вручную.

Yandex Cloud Marketplace
Вручную

Установите приложение cert-manager c плагином Cloud DNS ACME webhook по инструкции.

  1. Установите актуальную версию cert-manager. Например, для версии 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
    

Создайте ClusterIssuerСоздайте ClusterIssuer

Создайте объект ClusterIssuer, с помощью которого можно выпускать сертификаты Let's Encrypt®.

Сертификаты будут выпускаться после прохождения проверки HTTP-01 с помощью установленного ранее Ingress-контроллера.

Создайте объект с нужными параметрами:

  1. Создайте YAML-файл http01-clusterissuer.yaml с манифестом объекта:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: http01-clusterissuer
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: <ваш_email>
        privateKeySecretRef:
          name: http01-clusterissuer-secret
        solvers:
        - http01:
            ingress:
              class: nginx
    
  2. Создайте объект в кластере Managed Service for Kubernetes:

    kubectl apply -f http01-clusterissuer.yaml
    

Создайте объекты для проверки работы cert-managerСоздайте объекты для проверки работы cert-manager

Чтобы протестировать работу менеджера сертификатов, создайте объекты Ingress, Service и Deployment:

  1. Создайте YAML-файл app.yaml с манифестами объектов Ingress, Service и Deployment:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
      annotations:
        cert-manager.io/cluster-issuer: "http01-clusterissuer"
    spec:
      ingressClassName: nginx
      tls:
        - hosts:
          - <URL_адрес_вашего_домена>
          secretName: domain-name-secret
      rules:
        - host: <URL_адрес_вашего_домена>
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: app
                  port:
                    number: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: app
    spec:
      selector:
        app: app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app-deployment
      labels:
        app: app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: app
      template:
        metadata:
          labels:
            app: app
        spec:
          containers:
          - name: app
            image: nginx:latest
            ports:
            - containerPort: 80
    
  2. Создайте объекты в кластере Managed Service for Kubernetes:

    kubectl apply -f app.yaml
    

Проверьте работоспособность TLSПроверьте работоспособность TLS

  1. Убедитесь, что проверка прав на домен завершилась успешно и сертификат перешел в статус Issued:

    kubectl describe certificate domain-name-secret
    

    В выводе команды будут содержаться подобные события (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.

    Поскольку сертификат выпускается впервые, то соответствующий ему секрет отсутствует. Наличие событий, сообщающих об этом, не является ошибкой.

    Примечание

    Проверка прав на домен сертификата Let's Encrypt® может занять несколько часов.

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

    curl https://<ваш_домен>
    

    Результат:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    

    Примечание

    Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  1. Удалите кластер Managed Service for Kubernetes.
  2. Удалите публичную доменную зону.

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

Предыдущая
Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
Следующая
Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
Проект Яндекса
© 2025 ООО «Яндекс.Облако»