L7 балансировка

L7 балансировка — механизм распределения запросов прикладного уровня между несколькими внутренними сервисами (бэкендами). В отличие от L3/L4 балансировки, выполняемой по сетевым и транспортным параметрам, L7 балансировка позволяет задавать правила проксирования HTTP/HTTPS, управлять TLS-сертификатами, изменять заголовки запросов и ответов, а также проверять доступность бэкендов.

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

Доступ к интерфейсу осуществляется через боковое меню: NFV → L7 балансировка.

Важно

  • Для работы необходима лицензия L7Balancer. Доступность L7-балансировки определяется лицензиями и конфигурацией облака.

  • Для балансировки на сетевом (L3) и транспортном (L4) уровнях используйте раздел NFV → L3/L4 балансировка.

  • Прокси-сервер должен иметь сетевую связность с выбранными бэкендами. В отличие от L3/L4 балансировки, бэкенды могут находиться в разных сетях; при ручном вводе адреса необходимо обеспечить его доступность.

Основные возможности

  • Создание и управление L7-балансировщиками (прокси-серверами).

  • Присоединение сетевых интерфейсов для приёма трафика.

  • Создание прокси-правил с указанием фронтенда, порта прослушивания и одного или нескольких бэкендов.

  • Настройка алгоритмов распределения запросов и параметров повторных попыток подключения.

  • Настройка активных и пассивных проверок доступности бэкендов (health check).

  • Использование автоматического или ручного управления TLS-сертификатами.

  • Настройка заголовков HTTP-запросов и ответов.

  • Просмотр правил, связанных бэкендов и TLS-политик, а также удаление созданных ресурсов.

Управление L7-балансировщиками

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

Создание L7-балансировщика:

  1. Перейти в раздел NFV → L7 балансировка.

  2. Нажать Создать L7 балансировщик.

  3. Заполнить поля формы:

    • Имя — имя создаваемого балансировщика.

    • Описание — необязательное описание назначения балансировщика.

  4. Нажать ОК.

../../../_images/l7-balancer-create.png

Созданный балансировщик появляется в списке. В его карточке отображаются имя, статус и описание. Нажатие на имя открывает страницу детальной информации с вкладками Интерфейсы, Правила прокси и TLS Политики.

Редактирование L7-балансировщика:

  1. Открыть меню нужного балансировщика или перейти на его страницу детальной информации и нажать Редактировать.

  2. В открывшейся форме изменить Имя и/или Описание.

  3. Нажать ОК, чтобы сохранить изменения.

../../../_images/l7-balancer-update.png

Подключение сетевых интерфейсов

Для приёма входящих подключений к балансировщику необходимо присоединить интерфейс в нужной сети. Сетевые интерфейсы отображаются на вкладке Интерфейсы.

Присоединение интерфейса:

  1. Открыть страницу детальной информации L7-балансировщика.

  2. Перейти на вкладку Интерфейсы.

  3. Нажать Присоединить интерфейс.

  4. Заполнить форму:

    • Тип порта — выбрать тип присоединяемого порта (на скриншоте — Виртуальный порт). Доступны также виртуальный порт с DPDK-ускорением, порт VF SR-IOV, выделенный физический порт сетевой карты хоста.

    • Собственная сеть — выбрать сеть, в которой будет размещён интерфейс. Доступны вкладки Сети текущего проекта, Общие сети и Все сети.

    • Использовать gateway сети по-умолчанию — определить, следует ли использовать шлюз выбранной сети по умолчанию. Такая необходимость часто возникает, если к балансировщику подключается external сеть.

    • Собственная подсеть — выбрать подсеть для создаваемого интерфейса.

  5. Нажать ОК.

../../../_images/l7-balancer-interface.png

Просмотр подключённых интерфейсов:

На вкладке Интерфейсы отображаются IP-адрес, статус, сеть, тип порта и DNS (если он задан). Для поиска нужного интерфейса можно использовать фильтрацию.

../../../_images/l7-balancer-interfaces-list.png

Удаление интерфейса:

  1. На вкладке Интерфейсы выбрать нужный порт.

  2. Нажать Удалить или выбрать соответствующий пункт в меню порта (три точки).

  3. В окне подтверждения проверить IP-адрес удаляемого порта и нажать Подтвердить.

../../../_images/l7-balancer-interface-delete.png

Важно

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

Управление прокси-правилами

Прокси-правило определяет, где принимать входящие запросы (фронтенд), куда их передавать (бэкенды) и как выбирать бэкенд при обработке запросов. Для настройки нового правила предусмотрен мастер из пяти шагов:

  1. Конфигурация порта.

  2. Бэкенды.

  3. Настройки балансировки.

  4. Health check.

  5. Результат выполнения.

Создание прокси-правила:

  1. Открыть страницу детальной информации нужного балансировщика.

  2. Перейти на вкладку Правила прокси.

  3. Нажать Создать прокси-правило.

  4. Заполнить параметры на шагах мастера, описанных ниже.

Шаг 1. Конфигурация порта

На первом шаге необходимо указать фронтенд и параметры TLS-подключений.

  • Фронтенд — внешний адрес или доменное имя, либо же полный путь URL, по которому клиенты обращаются к сервису. В показанном примере указан адрес с путём 10.197.169.172/index.html.

  • Порт — порт, на котором прокси-правило принимает обращения.

  • Режим сертификата — способ управления TLS-сертификатом фронтенда:

    • Автоматический — выпуск и обновление сертификата выполняются автоматически через Let’s Encrypt. Доступен только для фронтендов с внешними IP-адресами.

    • Автоматический внутренний — выпуск и обновление сертификата выполняются автоматически через внутренний сервис CAaaS облака без обращения к Let’s Encrypt. Сертификат подписывается внутренним центром сертификации облака.

    • Ручной ввод — сертификат и соответствующий приватный ключ предоставляются пользователем.

    • Деактивирован — TLS не используется, соединения обрабатываются без шифрования по протоколу HTTP.

При выборе ручного режима появляются поля Содержание сертификата и Приватный ключ. Значения указываются в PEM-кодировке; также предусмотрена загрузка из локальных файлов.

../../../_images/l7-rule-certs.png

В разделе TLS можно настроить параметры подключения, в том числе:

  • Протокол — протокол подключения к целевому бэкенду (в примере выбран https). В поддерживаемых конфигурациях могут использоваться и другие транспорты, включая h2c и FastCGI.

  • Имя сервера TLS — имя сервера, применяемое при TLS-подключении.

  • Пропускать проверку TLS — отключение проверки TLS-сертификата при соответствующем подключении.

Кроме того, предусмотрены Заголовки запроса и Заголовки ответа: можно добавить пары «ключ — значение» для передачи соответствующих HTTP-заголовков. В случае если заголовок с таким именем существует, он будет заменен на выставленный в форме.

../../../_images/l7-rule-headers-and-https.png

Важно

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

  • Отключение проверки TLS снижает защищённость соответствующего соединения. Используйте эту опцию только при необходимости.

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

После заполнения параметров нажать Дальше.

../../../_images/l7-rule-port.png

Шаг 2. Бэкенды

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

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

Для каждого бэкенда указывается Порт назначения — транспортный порт, на котором работает целевой сервис. Адрес бэкенда можно выбрать двумя способами.

Задать вручную:

  1. Выбрать Задать вручную.

  2. В поле Внутренний порт ввести адрес бэкенда, например test.intra.com (несмотря на название поля, здесь вводится адрес).

  3. Указать Порт назначения сервиса.

../../../_images/l7-rule-port-manual.png

Использовать существующий порт:

  1. Выбрать Использовать существующий порт.

  2. Отметить нужный порт из списка облачных портов.

  3. Проверить выбранные IP-адрес, MAC-адрес и сеть.

  4. Указать Порт назначения.

../../../_images/l7-rule-port.png

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

Шаг 3. Настройки балансировки

На третьем шаге задаётся способ выбора бэкенда при обработке запросов.

  • Политика — алгоритм распределения запросов между бэкендами.

  • Повторы — количество повторных попыток при неудачной обработке запроса.

  • Длительность попытки, с — ограничение времени попытки, задаваемое в секундах.

../../../_images/l7-rule-lb.png

Алгоритмы L7-балансировки

Алгоритм балансировки определяет способ выбора бэкенда для обработки входящих HTTP/HTTPS-запросов. В поле Политика доступны следующие варианты:

  • Случайный доступный хост — каждый запрос направляется на случайно выбранный доступный бэкенд.

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

  • Циклический выбор — запросы последовательно распределяются между доступными бэкендами по кругу (Round Robin).

  • Наименьшее число активных запросов — запрос направляется на бэкенд с наименьшим количеством обрабатываемых в данный момент запросов.

  • Первый доступный хост — запросы направляются на первый доступный бэкенд из списка. Если он становится недоступен, выбирается следующий.

  • IP-адрес назначения — выбор бэкенда выполняется на основе хеша IP-адреса назначения запроса.

  • IP-адрес источника — выбор бэкенда выполняется на основе хеша IP-адреса клиента. Позволяет направлять запросы одного клиента на один и тот же бэкенд при неизменном составе доступных серверов.

  • URI запроса — выбор бэкенда выполняется на основе хеша URI HTTP-запроса. Позволяет направлять запросы с одинаковым URI на один и тот же бэкенд при неизменном составе доступных серверов.

Примечание

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

После выбора параметров нажать Дальше.

Шаг 4. Health check

На четвёртом шаге настраивается проверка доступности бэкендов. В форме предусмотрены Активный health check и Пассивный health check. Каждый из них можно включать или отключать независимо.

Активный health check — периодическая отправка контрольных запросов для проверки работоспособности бэкенда.

  • Путь — URL-путь для проверки, например /index.html.

  • Интервал, с — период между проверками.

  • Таймаут, с — максимальное время ожидания ответа.

  • Ожидаемый статус — HTTP-код, считающийся успешным результатом проверки (например, 200).

Пассивный health check — оценка состояния бэкенда по результатам обработки обычных пользовательских запросов.

  • Максимум неудач — допустимое количество неудачных ответов.

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

  • Неудачные статусы — коды HTTP-ответов, считающиеся ошибкой (в примере: 500, 502, 503, 504).

../../../_images/l7-rule-health.png

После настройки нажать Дальше и завершить создание правила на шаге Результат выполнения.

Примечание

Настройка health check особенно важна при использовании нескольких бэкендов: она позволяет учитывать недоступность отдельных сервисов при балансировке запросов.

Просмотр прокси-правил

После создания правило отображается на вкладке Правила прокси в детальной информации L7-балансировщика. В карточке указываются ID, Фронтенд, Порт прослушивания, Режим сертификата и количество Бэкендов.

Для просмотра подробных параметров нажать на ID прокси-правила. На открывшейся странице доступны вкладки Подробности и Бэкенды.

Вкладка «Подробности» содержит сведения о сертификате, TLS-настройках, выбранной политике распределения запросов, параметрах повторных попыток и проверке доступности.

../../../_images/l7-rule-details.png

Вкладка «Бэкенды» содержит адреса целевых сервисов, разрешённые адреса (при наличии) и порты назначения.

../../../_images/l7-rule-backends.png

Управление TLS-политиками

Для управления TLS-политиками L7-балансировщика предусмотрена отдельная вкладка TLS Политики. Здесь отображаются записи, связанные с фронтендами, которые были созданы при заполнении поля Режим сертификата, а также их SNI и текущая политика. Доступные режимы управления TLS Политиками:

  • Автоматический — выпуск и обновление сертификата выполняются автоматически через Let’s Encrypt. Доступен только для фронтендов с внешними IP-адресами.

  • Автоматический внутренний — выпуск и обновление сертификата выполняются автоматически через внутренний сервис CAaaS облака без обращения к Let’s Encrypt. Сертификат подписывается внутренним центром сертификации облака.

  • Ручной ввод — сертификат и соответствующий приватный ключ предоставляются пользователем.

  • Деактивирован — TLS не используется, соединения обрабатываются без шифрования по протоколу HTTP.

../../../_images/l7-rule-policy.png

Установка TLS-политики:

  1. Перейти на вкладку TLS Политики.

  2. Открыть меню нужной записи (три точки).

  3. Выбрать Установить политику.

  4. В открывшейся форме выбрать Политика.

  5. При выборе Ручной ввод указать Сертификат и Приватный ключ в PEM-кодировке или загрузить их из файлов.

  6. Нажать ОК.

../../../_images/l7-rule-policy-set.png

Сброс TLS-политики:

  1. На вкладке TLS Политики выбрать нужную запись.

  2. Открыть меню (три точки) и нажать Сбросить.

../../../_images/l7-rule-policy-drop.png
  1. В появившемся окне подтверждения нажать Подтвердить.

../../../_images/l7-rule-policy-drop-2.png

После сброса политика для соответствующей записи может отображаться как Деактивирован.

Важно

Важно помнить, что TLS-политика применяется к нескольким фронтендам. Перед сбросом TLS-политики убедитесь, что она больше не требуется для обслуживания HTTPS-подключений на соответствующих фронтендах.

Удаление прокси-правил и балансировщиков

Удаление прокси-правила:

  1. Открыть детальную информацию L7-балансировщика.

  2. Перейти на вкладку Правила прокси.

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

  4. В окне подтверждения проверить фронтенд и порт прослушивания, затем нажать Подтвердить.

../../../_images/l7-rule-delete.png

Удаление L7-балансировщика:

  1. Перейти в NFV → L7 балансировка.

  2. Выбрать нужный балансировщик и нажать Удалить.

  3. Ознакомиться с предупреждением и нажать Подтвердить.

../../../_images/l7-balancer-delete.png

Важно

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