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 для обработки. В этом случае есть возможность настроить таймауты на обработку запроса, добавить поддержку WebSocket или изменение URI перед передачей запроса в бэкенды.
- Перенаправление запроса на другой адрес с выбранным кодом ответа и модификациями URI запроса. В этом случае можно заменить путь (полностью или частично), удалить query-параметры, изменить хост, порт и схему.
- Немедленный возврат статического ответа.
-
gRPC-маршруты предназначены для обработки gRPC-запросов (удалённых вызовов процедур
) по протоколу HTTP/2.В качестве условия для gRPC-маршрута можно указать начало, полное имя метода (FQMN, fully qualified method name) или регулярное выражение
стандарта RE2 . Значение должно начинаться с косой черты/
.С запросом, который удовлетворяет условиям, можно выполнить одно из действий:
- Передача запроса в группу бэкендов типа gRPC для обработки. В этом случае есть возможность настроить таймауты на обработку запроса и заменить заголовок Host.
- Немедленный возврат статического ответа.