HTTP-роутеры
HTTP-роутер определяет правила маршрутизации HTTP-запросов в группы бэкендов.
Указывать HTTP-роутеры можно только для обработчиков типа HTTP. Если обработчик принимает чистый
TCP-трафик (тип Stream), то для него напрямую указывается группа бэкендов.
Если HTTP-роутер используется хотя бы в одном балансировщике, удалить его нельзя. Сначала удалите его из всех балансировщиков.
С помощью настроек HTTP-роутера можно модифицировать заголовки запросов и ответов, а также формировать небольшие статические ответы прямо на балансировщике нагрузки. Можно создать пустой HTTP-роутер, а потом добавить в него маршруты.
Маршруты внутри HTTP-роутера объединены в виртуальные хосты. Маршрутизация происходит в два этапа.
-
На основе заголовка
Host
(:authority
в случае HTTP/2) выбирается наиболее подходящий виртуальный хост. -
Выбирается первый маршрут, предикату которого удовлетворяет запрос. Порядок виртуальных хостов внутри роутера не важен, а порядок маршрутов внутри виртуального хоста важен — наиболее специфичные маршруты должны быть первыми в списке.
Виртуальные хосты
Виртуальные хосты объединяют маршруты, относящиеся к одному набору доменов — значений заголовков Host
(:authority
) HTTP-запроса. Поддерживаются как точные совпадения, так и символы подстановки. При получении входящего запроса балансировщик по очереди проверяет предикаты маршрутов и выбирает первый, удовлетворяющий запросу.
Балансировщик направляет трафик на бэкенд, который указывает на различные ресурсы. Эти ресурсы могут быть подвержены внешним угрозам. Вы можете защитить ресурсы с помощью сервиса Yandex Smart Web Security, подключив профиль безопасности к виртуальному хосту.
Если балансировщик управляется Ingress-контроллером Application Load Balancer, то подключать профиль безопасности следует с помощью аннотации ресурса Ingress.
Также на уровне виртуального хоста настраиваются модификации HTTP-заголовков запросов и ответов.
Маршруты
Маршруты состоят из набора условий (предиката), на основании которых балансировщик выбирает маршрут для запроса, и действия над запросом. Доступные условия и действия зависят от типа маршрута.
Типы маршрутов
HTTP-роутеры поддерживают два типа маршрутов — HTTP и gRPC:
-
HTTP-маршруты предназначены для обработки HTTP-запросов по протоколам HTTP/1.1 и HTTP/2.
В качестве условия для маршрута можно указать начало, полный путь запроса или регулярное выражение
стандарта RE2 , а также метод запроса (GET, POST и т. д.).С запросом, который удовлетворяет условиям, можно выполнить одно из действий:
-
Передача запроса в группу бэкендов типа HTTP для обработки. В этом случае можно настроить таймауты на обработку запроса:
-
Таймаут — максимальное время поддержания HTTP-соединения между узлом балансировщика и бэкендом, независимо от передачи данных. Значение по умолчанию —
60
. -
Таймаут простоя — максимальное время, в течение которого соединение может поддерживаться без передачи данных. Значения по умолчанию нет. Если таймаут не указан, он не учитывается.
Если соединение завершится по таймауту или таймауту простоя, балансировщик вернет код
504 Gateway Timeout
.
Помимо таймаутов, можно добавить поддержку WebSocket или изменение URI перед передачей запроса в бэкенды.
-
-
Перенаправление запроса на другой адрес с выбранным кодом ответа и модификациями URI запроса. В этом случае можно заменить путь (полностью или частично), удалить query-параметры, изменить хост, порт и схему.
-
Немедленный возврат статического ответа.
-
-
gRPC-маршруты предназначены для обработки gRPC-запросов (удалённых вызовов процедур
) по протоколу HTTP/2.В качестве условия для gRPC-маршрута можно указать начало, полное имя метода (FQMN, fully qualified method name) или регулярное выражение
стандарта RE2 . Значение должно начинаться с косой черты/
.С запросом, который удовлетворяет условиям, можно выполнить одно из действий:
- Передача запроса в группу бэкендов типа gRPC для обработки. В этом случае есть возможность настроить таймауты на обработку запроса и заменить заголовок Host.
- Немедленный возврат статического ответа.