Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Cloud Logging
  • Начало работы
    • Все руководства
    • Передача логов кластера Yandex Managed Service for Kubernetes в Cloud Logging
    • Передача логов с ВМ в Cloud Logging
    • Передача логов с COI в Cloud Logging
    • Передача логов через HTTP-вход Unified Agent в Cloud Logging
    • Репликация логов в Object Storage с помощью Fluent Bit
    • Репликация логов в Object Storage с помощью Data Streams
    • Визуализация логов в Grafana с помощью плагина Yandex Cloud Logging
    • Интерактивная отладка функций Cloud Functions
    • Запись логов балансировщика в PostgreSQL
    • Настройки логирования для Ingress-контроллеров Application Load Balancer
    • Обработка логов Cloud Logging
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Поиск событий Yandex Cloud в Cloud Logging
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Вопросы и ответы
  • Обучающие курсы

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Подготовьте инфраструктуру
  • Подготовьтесь к работе с кластером Managed Service for Kubernetes
  • Зарегистрируйте доменную зону
  • Установите Ingress-контроллер Application Load Balancer
  • Создайте тестовое приложение
  • Создайте ресурсы Ingress
  • Задайте настройки для групп ресурсов Ingress
  • Проверьте результат
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Настройки логирования для Ingress-контроллеров Application Load Balancer

Настройка логирования для L7-балансировщика Yandex Application Load Balancer с помощью Ingress-контроллера

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
    • Подготовьте инфраструктуру
    • Подготовьтесь к работе с кластером Managed Service for Kubernetes
    • Зарегистрируйте доменную зону
    • Установите Ingress-контроллер Application Load Balancer
  • Создайте тестовое приложение
  • Создайте ресурсы Ingress
  • Задайте настройки для групп ресурсов Ingress
  • Проверьте результат
  • Удалите созданные ресурсы

Вы можете задать настройки логирования для L7-балансировщиков, созданных с помощью Ingress-контроллеров Application Load Balancer в кластере Managed Service for Kubernetes.

Из этой статьи вы узнаете, как создать три L7-балансировщика с различными настройками логирования:

  • Запись в лог-группу по умолчанию.
  • Запись в пользовательскую лог-группу.
  • Без записи логов.

Чтобы задать настройки для L7-балансировщиков:

  1. Создайте тестовое приложение.
  2. Создайте ресурсы Ingress.
  3. Задайте настройки для групп ресурсов Ingress.
  4. Проверьте результат.

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

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

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

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

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

Подготовьте инфраструктуруПодготовьте инфраструктуру

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

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

Вручную
Terraform
  1. Создайте сервисные аккаунты для кластера Managed Service for Kubernetes:

    • Сервисный аккаунт для ресурсов с ролями k8s.clusters.agent и vpc.publicAdmin на каталог, в котором создается кластер Managed Service for Kubernetes.

    • Сервисный аккаунт для узлов с ролью container-registry.images.puller на каталог с реестром Docker-образов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.

    • Сервисный аккаунт для работы Ingress-контроллера Application Load Balancer с ролями:

      • alb.editor — для создания необходимых ресурсов.
      • vpc.publicAdmin — для управления внешней связностью.
      • certificate-manager.certificates.downloader — для работы с сертификатами, зарегистрированными в сервисе Yandex Certificate Manager.
      • compute.viewer — для использования узлов кластера Managed Service for Kubernetes в целевых группах балансировщика.

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

  2. Создайте авторизованный ключ для сервисного аккаунта Ingress-контроллера в формате JSON и сохраните его в файл key.json:

    yc iam key create \
       --service-account-name <имя_сервисного_аккаунта_для_Ingress-контроллера> \
       --output key.json
    

    Данные ключа необходимы для установки приложения ALB Ingress Controller.

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

    Также настройте группы безопасности, необходимые для работы Application Load Balancer.

    Важно

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

  4. Создайте кластер Managed Service for Kubernetes. При создании задайте настройки:

    • Укажите ранее созданные сервисный аккаунт для ресурсов и группы безопасности.
    • Если вы планируете работать с кластером в пределах сети Yandex Cloud, выделять кластеру публичный IP-адрес не нужно. Для подключений извне предоставьте кластеру публичный адрес.
  5. Создайте группу узлов. При создании задайте настройки:

    • Укажите ранее созданные сервисный аккаунт для узлов и группы безопасности.
    • Выделите публичный IP-адрес, чтобы предоставить группе узлов доступ в интернет и возможность скачивать Docker-образы и компоненты.
  6. Создайте пользовательскую лог-группу Cloud Logging.

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

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

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

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

  5. Скачайте в ту же рабочую директорию файл конфигурации k8s-and-registry-for-alb.tf.

    В этом файле описаны:

    • Сеть.

    • Подсеть.

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

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

      Часть правил необходима для работы Application Load Balancer.

      Важно

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

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

    • Сервисный аккаунт для работы Ingress-контроллера Application Load Balancer.

    • Пользовательская лог-группа Cloud Logging.

    • Авторизованный ключ для сервисного аккаунта Ingress-контроллера.

    • Создание локального файла key.json с данными авторизованного ключа. Данные ключа необходимы для установки приложения ALB Ingress Controller.

  6. Укажите в файле k8s-and-registry-for-alb.tf:

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

    terraform validate
    

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

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

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

      terraform plan
      

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

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

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

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

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

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

Подготовьтесь к работе с кластером Managed Service for KubernetesПодготовьтесь к работе с кластером Managed Service for Kubernetes

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

    Если для кластера не предоставлен публичный адрес и kubectl настроен через внутренний адрес кластера, выполняйте команды kubectl на ВМ Yandex Cloud, находящейся в одной сети с кластером.

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

Зарегистрируйте доменную зонуЗарегистрируйте доменную зону

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

Установите Ingress-контроллер Application Load BalancerУстановите Ingress-контроллер Application Load Balancer

Установите приложение ALB Ingress Controller согласно инструкции. При установке используйте данные ключа key.json из раздела Подготовьте инфраструктуру.

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

Создайте объекты ConfigMap, Deployment с NGINX и Service для приложения.

  1. Создайте файл приложения app.yaml:

    app.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: alb-demo-1
    data:
      nginx.conf: |
        worker_processes auto;
        events {
        }
        http {
          server {
            listen 80 ;
            location = /_healthz {
              add_header Content-Type text/plain;
              return 200 'ok';
            }
            location / {
              add_header Content-Type text/plain;
              return 200 'Index';
            }
            location = /app1 {
              add_header Content-Type text/plain;
              return 200 'This is APP#1';
            }
          }
        }
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: alb-demo-1
      labels:
        app: alb-demo-1
        version: v1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: alb-demo-1
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
      template:
        metadata:
          labels:
            app: alb-demo-1
            version: v1
        spec:
          terminationGracePeriodSeconds: 5
          volumes:
            - name: alb-demo-1
              configMap:
                name: alb-demo-1
          containers:
            - name: alb-demo-1
              image: nginx:latest
              ports:
                - name: http
                  containerPort: 80
              livenessProbe:
                httpGet:
                  path: /_healthz
                  port: 80
                initialDelaySeconds: 3
                timeoutSeconds: 2
                failureThreshold: 2
              volumeMounts:
                - name: alb-demo-1
                  mountPath: /etc/nginx
                  readOnly: true
              resources:
                limits:
                  cpu: 250m
                  memory: 128Mi
                requests:
                  cpu: 100m
                  memory: 64Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: alb-demo-1
    spec:
      selector:
        app: alb-demo-1
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          protocol: TCP
          nodePort: 30081
    
  2. Создайте приложение:

    kubectl apply -f app.yaml
    

    Результат:

    configmap/alb-demo-1 created
    deployment.apps/alb-demo-1 created
    service/alb-demo-1 created
    

Создайте ресурсы IngressСоздайте ресурсы Ingress

Создайте три ресурса Ingress, из которых Ingress-контроллер Application Load Balancer создаст три балансировщика с нужными обработчиками и HTTP-роутерами.

  1. Создайте файл ingress.yaml и укажите в нем настройки балансировщиков и доменное имя:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: logs-demo-nondefault
      annotations:
        ingress.alb.yc.io/group-name: non-default
        ingress.alb.yc.io/subnets: <список_идентификаторов_подсетей>
        ingress.alb.yc.io/security-groups: <список_идентификаторов_групп_безопасности>
        ingress.alb.yc.io/group-settings-name: non-default-settings
        ingress.alb.yc.io/external-ipv4-address: auto
    spec:
      rules:
        - host: <доменное_имя>
          http:
            paths:
              - pathType: Prefix
                path: "/"
                backend:
                  service:
                    name: alb-demo-1
                    port: 
                      name: http
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: logs-demo-disabled
      annotations:
        ingress.alb.yc.io/group-name: logs-disabled
        ingress.alb.yc.io/subnets: <список_идентификаторов_подсетей>
        ingress.alb.yc.io/security-groups: <список_идентификаторов_групп_безопасности>
        ingress.alb.yc.io/group-settings-name: logs-disabled-settings
        ingress.alb.yc.io/external-ipv4-address: auto
    spec:
      rules:
        - host: <доменное_имя>
          http:
            paths:
              - pathType: Prefix
                path: "/"
                backend:
                  service:
                    name: alb-demo-1
                    port:
                      name: http
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: logs-demo-default
      annotations:
        ingress.alb.yc.io/group-name: default
        ingress.alb.yc.io/subnets: <список_идентификаторов_подсетей>
        ingress.alb.yc.io/security-groups: <список_идентификаторов_групп_безопасности>
        ingress.alb.yc.io/external-ipv4-address: auto
    spec:
      rules:
        - host: <доменное_имя>
          http:
            paths:
              - pathType: Prefix
                path: "/"
                backend:
                  service:
                    name: alb-demo-1
                    port:
                      name: http
    

    Где:

    • ingress.alb.yc.io/group-name — имя группы. Ресурсы Ingress объединяются в группы, каждая из которых обслуживается отдельным L7-балансировщиком Application Load Balancer.

    • ingress.alb.yc.io/subnets — одна или несколько подсетей, в которых будет расположен балансировщик.

    • ingress.alb.yc.io/security-groups — одна или несколько групп безопасности для балансировщика. Если параметр не задан, используется группа безопасности по умолчанию.

    • ingress.alb.yc.io/external-ipv4-address — предоставление публичного доступа к балансировщику из интернета. Укажите заранее полученный IP-адрес либо установите значение auto, чтобы получить новый.

      Если вы указали значение auto, то при удалении балансировщика из облака также будет удален его IP-адрес. Чтобы избежать этого, используйте имеющийся зарезервированный адрес.

    • ingress.alb.yc.io/group-settings-name — имя для настроек группы ресурсов Ingress, которые должны быть описаны в дополнительном ресурсе IngressGroupSettings.

    (Опционально) Укажите дополнительные настройки контроллеров.

    Примечание

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

    К виртуальным хостам остальных ресурсов Ingress в группе эти настройки применены не будут.

    • ingress.alb.yc.io/internal-ipv4-address — предоставление внутреннего доступа к балансировщику. Укажите внутренний IP-адрес, либо установите значение auto, чтобы получить IP-адрес автоматически.

      Примечание

      Вы можете одновременно использовать только один тип доступа к балансировщику: ingress.alb.yc.io/external-ipv4-address или ingress.alb.yc.io/internal-ipv4-address.

    • ingress.alb.yc.io/internal-alb-subnet — подсеть, в которой нужно разместить балансировщик. Обязательный параметр, если выбран параметр ingress.alb.yc.io/internal-ipv4-address.

    • ingress.alb.yc.io/protocol — протокол соединений между балансировщиком и бэкендами:

      • http — HTTP/1.1. Значение по умолчанию.
      • http2 — HTTP/2.
      • grpc — gRPC.
    • ingress.alb.yc.io/transport-security — протокол шифрования соединений между балансировщиком и бэкендами.

      Важно

      В ALB Ingress Controller версии 0.2.0 и позднее аннотация используется только в объекте Service.

      Если указать аннотацию в ресурсах Ingress, где используется один сервис с одинаковыми настройками для групп бэкендов, аннотация применится корректно. Но такой механизм устарел, в дальнейшем он не будет поддерживаться.

      Допустимое значение: tls — TLS без проверки сертификата.

      Если аннотация не указана, балансировщик соединяется с бэкендами без шифрования.

    • ingress.alb.yc.io/prefix-rewrite — замена пути на указанное значение.

    • ingress.alb.yc.io/upgrade-types — допустимые значения HTTP-заголовка Upgrade, например, websocket.

    • ingress.alb.yc.io/request-timeout — максимальный период, на который может быть установлено соединение.

    • ingress.alb.yc.io/idle-timeout — максимальный период, в течение которого соединение может простаивать без передачи данных.

      Значения для request-timeout и idle-timeout следует указывать с единицами измерения, например: 300ms, 1.5h. Допустимые единицы измерения:

      • ns — наносекунды.
      • us — микросекунды.
      • ms — миллисекунды.
      • s — секунды.
      • m — минуты.
      • h — часы.

    Подробное описание настроек ресурса Ingress см. в статье Поля и аннотации ресурса Ingress.

  2. Создайте ресурсы Ingress:

    kubectl apply -f ingress.yaml
    

    Результат:

    ingress.networking.k8s.io/logs-demo-nondefault created
    ingress.networking.k8s.io/logs-demo-disabled created
    ingress.networking.k8s.io/logs-demo-default created
    

    По конфигурациям ресурсов Ingress будут автоматически развернуты три L7-балансировщика.

Задайте настройки для групп ресурсов IngressЗадайте настройки для групп ресурсов Ingress

Создайте ресурс IngressGroupSettings с настройками логирования для групп ресурсов Ingress:

  • non-default-settings — запись в пользовательскую лог-группу, созданную ранее, с определенными правилами.
  • logs-disabled-settings — запись логов отключена.

Для записи в лог-группу по умолчанию настройки не указываются.

  1. Создайте файл settings.yaml и укажите в нем идентификатор лог-группы:

    apiVersion: alb.yc.io/v1alpha1
    kind: IngressGroupSettings
    metadata:
      name: non-default-settings
    logOptions:
      logGroupID: <идентификатор_пользовательской_лог-группы>
      discardRules:
        - discardPercent: 50
          grpcCodes:
            - OK
            - CANCELLED
            - UNKNOWN
        - discardPercent: 67
          httpCodeIntervals:
            - HTTP_1XX
        - discardPercent: 20
          httpCodes:
            - 200
            - 404
    ---
    apiVersion: alb.yc.io/v1alpha1
    kind: IngressGroupSettings
    metadata:
      name: logs-disabled-settings
    logOptions:
      disable: true
    
  2. Создайте ресурсы:

    kubectl apply -f settings.yaml
    

    Результат:

    ingressgroupsettings.alb.yc.io/non-default-settings created
    ingressgroupsettings.alb.yc.io/logs-disabled-settings created
    

Настройки, указанные в этих ресурсах, применятся к группам ресурсов Ingress в соответствии с аннотациями ingress.alb.yc.io/group-settings-name, указанными для ресурсов Ingress.

Проверьте результатПроверьте результат

Получите идентификаторы лог-групп для созданных L7-балансировщиков и убедитесь, что они соответствуют настройкам в файле settings.yaml:

  • Для одного балансировщика должна быть выбрана созданная пользовательская лог-группа с определенными правилами.
  • Для другого — лог-группа по умолчанию.
  • Для третьего запись логов должна быть отключена.

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

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

Вручную
Terraform
  1. Удалите кластер Managed Service for Kubernetes.
  2. Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.
  3. Удалите сервисные аккаунты.
  4. Удалите лог-группу.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

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

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

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

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

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

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

Предыдущая
Запись логов балансировщика в PostgreSQL
Следующая
Обработка логов Cloud Logging
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»