Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все инструкции
    • Подключение к узлу по SSH
    • Подключение к узлу через OS Login
    • Обновление Kubernetes
    • Настройка автомасштабирования
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка NodeLocal DNS для контроллера сетевых политик Cilium
      • Создание сетевого балансировщика с помощью Ingress-контроллера NGINX
    • Подключение внешних узлов к кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

  • Перед началом работы
  • Создайте простое приложение
  • Создайте сервис типа LoadBalancer с публичным IP-адресом
  • Создайте сервис типа LoadBalancer с внутренним IP-адресом
  • Укажите дополнительные параметры сервиса
  • Укажите параметры проверки состояния узлов
  • Создайте объект NetworkPolicy
  • Удалите созданные ресурсы
  1. Пошаговые инструкции
  2. Сетевые сценарии
  3. Обеспечение доступа к приложению, запущенному в кластере Kubernetes

Обеспечение доступа к приложению, запущенному в кластере Kubernetes

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Перед началом работы
  • Создайте простое приложение
  • Создайте сервис типа LoadBalancer с публичным IP-адресом
  • Создайте сервис типа LoadBalancer с внутренним IP-адресом
  • Укажите дополнительные параметры сервиса
  • Укажите параметры проверки состояния узлов
  • Создайте объект NetworkPolicy
  • Удалите созданные ресурсы

Для предоставления доступа к приложению, запущенному в кластере Kubernetes, вы можете использовать публичные и внутренние сервисы различных типов.

Чтобы опубликовать приложение, воспользуйтесь сервисом типа LoadBalancer. Возможны следующие варианты:

  • Публичный доступ по IP-адресу с сетевым балансировщиком нагрузки.

  • Доступ из внутренних сетей по IP-адресу с внутренним сетевым балансировщиком нагрузки.

    Приложение будет доступно:

    • Из подсетей Yandex Virtual Private Cloud.
    • Из внутренних подсетей организации, подключенных к Yandex Cloud с помощью сервиса Yandex Cloud Interconnect.
    • Через VPN.

При использовании внешнего балансировщика нагрузки в поле loadBalancerIP можно указать статический публичный IP-адрес. Такой адрес необходимо зарезервировать заранее. Во время резервирования публичного IP-адреса можно активировать защиту от DDoS-атак. Если не указывать статический публичный IP-адрес, то сетевому балансировщику нагрузки будет назначен динамический публичный IP-адрес.

Примечание

В отличие от IP-адреса пода или узла, который может меняться в случае обновления ресурсов группы узлов, статический публичный IP-адрес сервиса типа LoadBalancer не изменяется.

При использовании внутреннего балансировщика нагрузки можно указать внутренний IP-адрес. Убедитесь, что указанный внутренний IP-адрес не назначен какому-либо ресурсу в той же облачной сети.

Важно

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

Подготовьте и запустите в кластере Kubernetes приложение, к которому необходимо предоставить доступ с помощью сервиса типа LoadBalancer. В качестве примера используйте приложение, которое отвечает на HTTP-запросы на порт 8080.

  1. Создайте простое приложение.
  2. Создайте сервис типа LoadBalancer с публичным IP-адресом.
  3. Создайте сервис типа LoadBalancer с внутренним IP-адресом.
  4. Укажите дополнительные параметры сервиса.
  5. Укажите параметры проверки состояния узлов.
  6. (Опционально) Создайте объект NetworkPolicy.
Как обеспечить доступ к приложению с помощью HTTPS?

См. документацию:

  • Создание нового Kubernetes-проекта в Yandex Cloud
  • Настройка L7-балансировщика Yandex Application Load Balancer с помощью Ingress-контроллера
  • Установка Ingress-контроллера NGINX с менеджером для сертификатов Let's Encrypt®
  • Установка Ingress-контроллера NGINX с сертификатом из Yandex Certificate Manager

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

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

Подготовьте необходимую инфраструктуру:

Вручную
Terraform
  1. Создайте облачную сеть и подсеть.

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

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

    Важно

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

  4. Создайте кластер Managed Service for Kubernetes и группу узлов с публичным доступом в интернет и с группами безопасности, подготовленными ранее.

  1. Если у вас еще нет Terraform, установите его.

  2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации кластера Managed Service for Kubernetes k8s-load-balancer.tf. В файле описаны:

    • Сеть.

    • Подсеть.

    • Кластер Managed Service for Kubernetes.

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

    • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Важно

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

  6. Укажите в файле конфигурации:

    • Идентификатор каталога.
    • Версию Kubernetes для кластера и групп узлов Managed Service for Kubernetes.
    • Имя сервисного аккаунта кластера Managed Service for Kubernetes.
  7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  8. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

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

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

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

Создайте простое приложениеСоздайте простое приложение

  1. Сохраните следующую спецификацию для создания приложения в YAML-файл с именем hello.yaml.

    Deployment — объект API Kubernetes, который управляет реплицированным приложением.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          containers:
          - name: hello-app
            image: cr.yandex/crpjd37scfv653nl11i9/hello:1.1
    
  2. Создайте приложение:

    CLI

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

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    kubectl apply -f hello.yaml
    

    Результат:

    deployment.apps/hello created
    
  3. Посмотрите информацию о созданном приложении:

    CLI
    kubectl describe deployment hello
    

    Результат:

    Name:                   hello
    Namespace:              default
    CreationTimestamp:      Wed, 28 Oct 2020 23:15:25 +0300
    Labels:                 <none>
    Annotations:            deployment.kubernetes.io/revision: 1
    Selector:               app=hello
    Replicas:               2 desired | 2 updated | 2 total | 1 available | 1 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=hello
      Containers:
       hello-app:
        Image:        cr.yandex/crpjd37scfv653nl11i9/hello:1.1
        Port:         <none>
        Host Port:    <none>
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      False   MinimumReplicasUnavailable
      Progressing    True    ReplicaSetUpdated
    OldReplicaSets:  <none>
    NewReplicaSet:   hello-******** (2/2 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  10s   deployment-controller  Scaled up replica set hello-******** to 2
    

Создайте сервис типа LoadBalancer с публичным IP-адресомСоздайте сервис типа LoadBalancer с публичным IP-адресом

Когда вы создаете сервис типа LoadBalancer, контроллер Yandex Cloud создает в вашем каталоге и настраивает для вас сетевой балансировщик нагрузки с публичным IP-адресом.

Важно

  • Созданный сетевой балансировщик тарифицируется согласно установленным правилам тарификации.
  • Не изменяйте и не удаляйте сетевой балансировщик нагрузки и целевые группы, которые будут автоматически созданы в вашем каталоге после создания сервиса с типом LoadBalancer.
  1. Сохраните следующую спецификацию для создания сервиса типа LoadBalancer в YAML-файл с именем load-balancer.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: hello
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        name: plaintext
        targetPort: 8080
      # Kubernetes-метки селектора, использованные в шаблоне подов при создании объекта Deployment.
      selector:
        app: hello
    

    Подробнее см. в справочнике ресурса Service для Yandex Network Load Balancer.

  2. Создайте сетевой балансировщик нагрузки:

    CLI
    kubectl apply -f load-balancer.yaml
    

    Результат:

    service/hello created
    
  3. Посмотрите информацию о созданном сетевом балансировщике нагрузки:

    Консоль управления
    CLI
    1. В консоли управления выберите ваш каталог по умолчанию.
    2. Выберите сервис Network Load Balancer.
    3. На вкладке Балансировщики отображен сетевой балансировщик нагрузки с префиксом k8s в имени и уникальным идентификатором вашего кластера Kubernetes в описании.
    kubectl describe service hello
    

    Результат:

    Name:                     hello
    Namespace:                default
    Labels:                   <none>
    Annotations:              <none>
    Selector:                 app=hello
    Type:                     LoadBalancer
    IP:                       172.20.169.7
    LoadBalancer Ingress:     130.193.50.111
    Port:                     plaintext 80/TCP
    TargetPort:               8080/TCP
    NodePort:                 plaintext 32302/TCP
    Endpoints:                10.1.130.4:8080
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:
      Type    Reason                Age    From                Message
      ----    ------                ----   ----                -------
      Normal  EnsuringLoadBalancer  2m43s  service-controller  Ensuring load balancer
      Normal  EnsuredLoadBalancer   2m17s  service-controller  Ensured load balancer
    
  4. Убедитесь, что приложение доступно из интернета:

    CLI
    curl http://130.193.50.111
    

    Где 130.193.50.111 — публичный IP-адрес из поля LoadBalancer Ingress.

    Результат:

    Hello, world!
    Running in 'hello-********'
    

    Примечание

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

Создайте сервис типа LoadBalancer с внутренним IP-адресомСоздайте сервис типа LoadBalancer с внутренним IP-адресом

  1. Измените спецификацию в файле load-balancer.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: hello
      annotations:
        # Тип балансировщика.
        yandex.cloud/load-balancer-type: internal
        # Идентификатор подсети для внутреннего сетевого балансировщика нагрузки.
        yandex.cloud/subnet-id: e1b23q26ab1c********
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        name: plaintext
        targetPort: 8080
      # Kubernetes-метки селектора, использованные в шаблоне подов при создании объекта Deployment.
      selector:
        app: hello
    

    Подробнее см. в справочнике ресурса Service для Yandex Network Load Balancer.

  2. Удалите созданный ранее внешний сетевой балансировщик нагрузки:

    CLI
    kubectl delete service hello
    

    Результат:

    service "hello" deleted
    
  3. Создайте внутренний сетевой балансировщик нагрузки:

    CLI
    kubectl apply -f load-balancer.yaml
    

    Результат:

    service/hello created
    

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

В Managed Service for Kubernetes для сервиса типа LoadBalancer можно указать дополнительные параметры:

  • loadBalancerIP — заранее зарезервированный (статический) публичный IP-адрес.
  • externalTrafficPolicy — политика управления трафиком.
Пример
apiVersion: v1
kind: Service
metadata:
  name: hello
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: plaintext
    targetPort: 8080
  selector:
    app: hello
  loadBalancerIP: 159.161.32.22
  externalTrafficPolicy: Cluster

Подробнее см. в справочнике ресурса Service для Yandex Network Load Balancer.

Укажите параметры проверки состояния узловУкажите параметры проверки состояния узлов

Сервисы типа LoadBalancer в Managed Service for Kubernetes могут выполнять запросы проверки состояния целевой группы узлов Kubernetes. На основании полученных метрик Managed Service for Kubernetes принимает решение о доступности узлов.

Чтобы включить режим проверки состояния узлов, укажите аннотации yandex.cloud/load-balancer-healthcheck-* в спецификации сервиса, например:

apiVersion: v1
kind: Service
metadata:
  name: hello
  annotations:
    # Параметры проверки состояния узлов
    yandex.cloud/load-balancer-healthcheck-healthy-threshold: "2"
    yandex.cloud/load-balancer-healthcheck-interval: "2s"

Подробнее см. в справочнике ресурса Service для Yandex Network Load Balancer.

Создайте объект NetworkPolicyСоздайте объект NetworkPolicy

Для подключения к сервисам, опубликованным через Network Load Balancer, с определенных IP-адресов, в кластере должны быть включены сетевые политики. Для настройки доступа через балансировщик создайте объект NetworkPolicy с политикой типа Ingress.

Пример настройки объекта NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: whitelist-netpol
  namespace: ns-example
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    # Диапазоны адресов, используемые балансировщиком для проверки состояния узлов.
    - ipBlock:
        cidr: 198.18.235.0/24
    - ipBlock:
        cidr: 198.18.248.0/24
    # Диапазоны адресов подов.
    - ipBlock:
        cidr: 172.16.1.0/12
    - ipBlock:
        cidr: 172.16.2.0/12

Подробнее см. в справочнике ресурса NetworkPolicy для Yandex Network Load Balancer.

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

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

  1. Удалите ресурсы в зависимости от способа их создания:

    Вручную
    Terraform

    Удалите кластер Managed Service for Kubernetes.

    1. В терминале перейдите в директорию с планом инфраструктуры.

      Важно

      Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

    2. Удалите ресурсы:

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

        terraform destroy
        
      2. Подтвердите удаление ресурсов и дождитесь завершения операции.

      Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

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

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

Предыдущая
Установка Velero
Следующая
Настройка контроллера сетевых политик Calico
Проект Яндекса
© 2025 ООО «Яндекс.Облако»