Управлять маршрутами
Маршруты состоят из набора условий (предиката), на основании которых балансировщик выбирает дальнейшее направление для запроса, и действия над ним. Доступные условия и действия зависят от типа маршрута.
Создать маршрут
Чтобы создать маршрут в виртуальном хосте HTTP-роутера:
-
В консоли управления
выберите каталог, в котором вы будете создавать маршрут для виртуального хоста. -
В списке сервисов выберите Application Load Balancer.
-
На панели слева выберите
HTTP-роутеры и выберите HTTP-роутер, в котором находится виртуальный хост, для которого требуется создать маршрут. -
На открывшейся странице в секции Виртуальные хосты в блоке с нужным виртуальным хостом нажмите значок
и выберите Редактировать.При необходимости создайте новый виртуальный хост.
В открывшемся окне нажмите кнопку Добавить маршрут и в появившейся форме Новый маршрут, в зависимости от типа создаваемого маршрута:
HTTPgRPC-
В поле Имя укажите имя создаваемого маршрута. Требования к имени:
- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
В поле Тип выберите
HTTP
. -
В поле Путь выберите одну из опций:
Совпадает с
— чтобы маршрутизировать запросы, путь в которых идентичен пути, заданному в текстовом поле справа. Например, чтобы маршрутизировать все запросы, укажите путь/
.Начинается с
— чтобы маршрутизировать запросы, путь в которых начинается с префикса, заданного в текстовом поле справа.Регулярное выражение
— чтобы маршрутизировать запросы, путь в которых удовлетворяет регулярному выражению стандарта RE2 , заданному в текстовом поле справа. Например:[a-z]{10}[0-9]{3}
.
-
В поле Методы HTTP выберите нужные HTTP-методы
, запросы с которыми необходимо маршрутизировать. -
В поле Действие выберите одну из опций:
Маршрутизация
,Перенаправление
илиОтвет
. В зависимости от выбранной опции:МаршрутизацияПеренаправлениеОтвет-
В поле Группа бэкендов выберите группу бэкендов, расположенную в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.
-
(Опционально) В поле Замена пути или начала укажите путь, по которому HTTP-роутер должен перенаправлять трафик. Если ранее в поле Путь вы выбрали опцию
Совпадает с
, путь будет полностью заменен. Если была выбрана опцияНачинается с
, будет изменено только начало. -
(Опционально) В поле Замена заголовка Host выберите одну из опций:
none
— заголовок Host в запросе не изменяется.rewrite
— заголовок Host в запросе заменяется на указанное значение.auto
— заголовок Host в запросе автоматически заменяется на адрес целевой виртуальной машины.
-
(Опционально) Включите опции Ограничивать все запросы и/или Ограничивать запросы с одного IP и задайте соответствующие ограничения на количество запросов, которые будут обрабатываться для данного маршрута за единицу времени.
-
(Опционально) В поле Таймаут, с укажите максимальное время, на которое может быть установлено соединение.
-
(Опционально) В поле Таймаут простоя, с укажите максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных.
-
(Опционально) В поле Допустимые значения заголовка Upgrade:
- (Опционально) Укажите список протоколов, на которые группа бэкендов может перейти в рамках TCP-соединения по запросу клиента. Используйте кнопку Добавить тип модификации, чтобы добавлять дополнительные протоколы.
- (Опционально) Включите опцию WebSocket, если вы хотите использовать протокол WebSocket
.
-
В поле Код состояния HTTP выберите код, по которому будет осуществляться перенаправление:
301 Moved Permanently
;302 Found
;303 See Other
;307 Temporary Redirect
;308 Permanent Redirect
.
-
(Опционально) Включите опцию Замена пути или начала и укажите тип модификации пути, по которому HTTP-роутер должен перенаправлять трафик:
Весь путь
— чтобы полностью заменить путь запроса на значение, заданное в поле справа.Начало
— чтобы изменить префикс пути запроса на значение, заданное в поле справа.
Примечание
Если в поле Путь выше вы выбрали опцию
Совпадает с
, путь будет полностью заменен, даже если в поле Замена пути или начала выбрана опцияНачало
. -
(Опционально) Включите опцию Удалить query-параметры, чтобы удалять из запросов все query-параметры.
-
(Опционально) Включите опцию Изменить схему, чтобы изменять схему в запросах на схему, заданную в поле справа.
Если в исходном URI использована схема
http
(https
) и указан порт80
(443
), при изменении схемы порт будет удален. -
(Опционально) Включите опцию Изменить хост и в поле справа укажите новый хост.
-
(Опционально) Включите опцию Изменить порт и в поле справа укажите новый порт.
-
В поле Код состояния HTTP выберите код статического ответа, который будет отправляться на запрос.
-
В поле Тело ответа задайте тело статического ответа на запросы. Для этого нажмите кнопку Выбрать и в открывшемся окне:
-
В поле Способ выберите:
Файл
— чтобы выбрать текстовый файл, содержащий тело ответа.Текст
— чтобы указать текст ответа в текстовом поле.- Нажмите кнопку Добавить.
-
-
-
В поле Имя укажите имя создаваемого маршрута. Требования к имени:
- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
В поле Тип выберите
gRPC
. -
В поле FQMN выберите одну из опций:
Совпадает с
— чтобы маршрутизировать запросы, FQMN которых идентичен FQMN, заданному в текстовом поле справа.Начинается с
— чтобы маршрутизировать запросы, FQMN в которых начинается с префикса, заданного в текстовом поле справа. Например, вы можете указать первое слово в имени сервиса:/helloworld
.Регулярное выражение
— чтобы маршрутизировать запросы, FQMN в которых удовлетворяет регулярному выражению стандарта RE2 , заданному в текстовом поле справа.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры. -
В поле Действие выберите одну из опций:
Маршрутизация
илиОтвет
. В зависимости от выбранной опции:МаршрутизацияОтвет-
В поле Группа бэкендов выберите группу бэкендов, расположенную в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.
-
(Опционально) В поле Замена заголовка Host выберите одну из опций:
none
— заголовок Host в запросе не изменяется.rewrite
— заголовок Host в запросе заменяется на указанное значение.auto
— заголовок Host в запросе автоматически заменяется на адрес целевой виртуальной машины.
-
(Опционально) Включите опции Ограничивать все запросы и/или Ограничивать запросы с одного IP и задайте соответствующие ограничения на количество запросов, которые будут обрабатываться для данного маршрута за единицу времени.
- (Опционально) В поле Максимальный таймаут, с укажите максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовок
grpc-timeout
с меньшим значением таймаута. - (Опционально) В поле Таймаут простоя, с укажите максимальное время, в течение которого соединение может простаивать без передачи данных.
В поле Код состояния gRPC выберите код статического ответа, отправляемого балансировщиком в ответ на запрос:
OK
;INVALID_ARGUMENT
;NOT_FOUND
;PERMISSION_DENIED
;UNAUTHENTICATED
;UNIMPLEMENTED
;INTERNAL
;UNAVAILABLE
.
-
-
-
(Опционально) Чтобы изменить порядок маршрутов, нажмите кнопку Сортировать и в открывшемся окне:
- С помощью мышки методом перетаскивания выстройте нужный порядок маршрутов.
- Нажмите кнопку Сохранить.
Примечание
Позднее вы в любой момент сможете изменить порядок маршрутов виртуального хоста.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
С помощью Yandex Cloud CLI вы можете добавлять в виртуальный хост разные типы маршрутов:
Yandex Cloud CLI позволяет использовать три разных команды для добавления HTTP-маршрутов в виртуальный хост:
yc alb virtual-host append-http-route
— добавляет маршрут в конец списка маршрутов виртуального хоста.yc alb virtual-host prepend-http-route
— добавляет маршрут в начало списка маршрутов виртуального хоста.yc alb virtual-host insert-http-route
— добавляет маршрут в указанное место внутри списка маршрутов виртуального хоста.
-
Посмотрите описание команды CLI для добавления маршрута в конец списка маршрутов виртуального хоста:
yc alb virtual-host append-http-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host append-http-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --match-http-method <метод_1>,<метод_2>,...<метод_n> \ --exact-path-match <полный_путь> \ --prefix-path-match <префикс_пути> \ --regex-path-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
--match-http-method
— список HTTP-методов , запросы с которыми необходимо маршрутизировать. Например:--match-http-method GET,POST,OPTIONS
. Необязательный параметр. Если не задан, маршрутизироваться будут запросы с любыми методами. -
Параметры с условиями маршрутизации на основе пути:
--exact-path-match
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.--prefix-path-match
— маршрутизировать запросы, путь в которых начинается с заданного префикса. Например:myapp/
.--regex-path-match
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Примечание
Параметры
--exact-path-match
,--prefix-path-match
и--regex-path-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-timeout
— максимальное время в секундах, на которое может быть установлено соединение по запросу. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route http: match: path: prefix_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 60s auto_host_rewrite: false - name: my-second-route http: match: http_method: - GET - POST - OPTIONS path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 2s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "10" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host append-http-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для добавления маршрута в начало списка маршрутов:
yc alb virtual-host prepend-http-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host prepend-http-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --match-http-method <метод_1>,<метод_2>,...<метод_n> \ --exact-path-match <полный_путь> \ --prefix-path-match <префикс_пути> \ --regex-path-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
--match-http-method
— список HTTP-методов , запросы с которыми необходимо маршрутизировать. Например:--match-http-method GET,POST,OPTIONS
. Необязательный параметр. Если не задан, маршрутизироваться будут запросы с любыми методами. -
Параметры с условиями маршрутизации на основе пути:
--exact-path-match
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.--prefix-path-match
— маршрутизировать запросы, путь в которых начинается с заданного префикса. Например:myapp/
.--regex-path-match
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Примечание
Параметры
--exact-path-match
,--prefix-path-match
и--regex-path-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-timeout
— максимальное время в секундах, на которое может быть установлено соединение по запросу. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-second-route http: match: http_method: - GET - POST - OPTIONS path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 2s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "10" disable_security_profile: true - name: my-first-route http: match: path: prefix_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 60s auto_host_rewrite: false modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host prepend-http-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для добавления маршрута в заданное место в списке маршрутов:
yc alb virtual-host insert-http-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы узнать текущий порядок маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route http: match: path: prefix_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 60s auto_host_rewrite: false - name: my-second-route http: match: http_method: - GET - POST - OPTIONS path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 2s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "10" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host insert-http-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --match-http-method <метод_1>,<метод_2>,...<метод_n> \ --exact-path-match <полный_путь> \ --prefix-path-match <префикс_пути> \ --regex-path-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile \ --before <имя_последующего_маршрута> \ --after <имя_предшествующего_маршрута>
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
--match-http-method
— список HTTP-методов , запросы с которыми необходимо маршрутизировать. Например:--match-http-method GET,POST,OPTIONS
. Необязательный параметр. Если не задан, маршрутизироваться будут запросы с любыми методами. -
Параметры с условиями маршрутизации на основе пути:
--exact-path-match
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.--prefix-path-match
— маршрутизировать запросы, путь в которых начинается с заданного префикса. Например:myapp/
.--regex-path-match
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Примечание
Параметры
--exact-path-match
,--prefix-path-match
и--regex-path-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-timeout
— максимальное время в секундах, на которое может быть установлено соединение по запросу. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
--before
— имя маршрута, перед которым в общем списке маршрутов виртуального хоста будет добавлен новый маршрут.--after
— имя маршрута, после которого в общем списке маршрутов виртуального хоста будет добавлен новый маршрут.
Примечание
Параметры
--before
и--after
— взаимоисключающие: вы можете указать только один из них.Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route http: match: path: prefix_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 60s auto_host_rewrite: false - name: my-third-route http: match: http_method: - PATCH - PUT path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 2s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "10" disable_security_profile: true - name: my-second-route http: match: http_method: - GET - POST - OPTIONS path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 2s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "10" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host insert-http-route
с полным перечнем параметров см. в справочнике CLI. -
Yandex Cloud CLI позволяет использовать три разных команды для добавления gRPC-маршрутов в виртуальный хост:
yc alb virtual-host append-grpc-route
— добавляет маршрут в конец списка маршрутов виртуального хоста.yc alb virtual-host prepend-grpc-route
— добавляет маршрут в начало списка маршрутов виртуального хоста.yc alb virtual-host insert-grpc-route
— добавляет маршрут в указанное место внутри списка маршрутов виртуального хоста.
-
Посмотрите описание команды CLI для добавления маршрута в конец списка маршрутов виртуального хоста:
yc alb virtual-host append-grpc-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host append-grpc-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --exact-fqmn-match <полный_FQMN> \ --prefix-fqmn-match <префикс_FQMN> \ --regex-fqmn-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-max-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
Параметры с условиями маршрутизации на основе FQMN:
--exact-fqmn-match
— маршрутизировать запросы, FQMN в которых идентичен заданному.--prefix-fqmn-match
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.--regex-fqmn-match
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры.Примечание
Параметры
--exact-fqmn-match
,--prefix-fqmn-match
и--regex-fqmn-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-max-timeout
— максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 60s idle_timeout: 5s auto_host_rewrite: false - name: my-second-route grpc: match: fqmn: prefix_match: helloworld/ route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "4" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host append-grpc-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для добавления маршрута в начало списка маршрутов:
yc alb virtual-host prepend-grpc-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host prepend-grpc-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --exact-fqmn-match <полный_FQMN> \ --prefix-fqmn-match <префикс_FQMN> \ --regex-fqmn-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-max-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
Параметры с условиями маршрутизации на основе FQMN:
--exact-fqmn-match
— маршрутизировать запросы, FQMN в которых идентичен заданному.--prefix-fqmn-match
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.--regex-fqmn-match
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры.Примечание
Параметры
--exact-fqmn-match
,--prefix-fqmn-match
и--regex-fqmn-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-max-timeout
— максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-second-route grpc: match: fqmn: prefix_match: helloworld/ route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "4" disable_security_profile: true - name: my-first-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 60s idle_timeout: 5s auto_host_rewrite: false modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host prepend-grpc-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для добавления маршрута в заданное место в списке маршрутов:
yc alb virtual-host insert-grpc-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы узнать текущий порядок маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 60s idle_timeout: 5s auto_host_rewrite: false - name: my-second-route grpc: match: fqmn: prefix_match: helloworld/ route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "4" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
-
Добавьте маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host insert-grpc-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --exact-fqmn-match <полный_FQMN> \ --prefix-fqmn-match <префикс_FQMN> \ --regex-fqmn-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-max-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile \ --before <имя_последующего_маршрута> \ --after <имя_предшествующего_маршрута>
Где:
-
--http-router-name
— имя HTTP-роутера, в котором создается маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором создается маршрут. -
Параметры с условиями маршрутизации на основе FQMN:
--exact-fqmn-match
— маршрутизировать запросы, FQMN в которых идентичен заданному.--prefix-fqmn-match
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.--regex-fqmn-match
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры.Примечание
Параметры
--exact-fqmn-match
,--prefix-fqmn-match
и--regex-fqmn-match
— взаимоисключающие: вы можете использовать только один из них. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-max-timeout
— максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
-
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
--before
— имя маршрута, перед которым в общем списке маршрутов виртуального хоста будет добавлен новый маршрут.--after
— имя маршрута, после которого в общем списке маршрутов виртуального хоста будет добавлен новый маршрут.
Примечание
Параметры
--before
и--after
— взаимоисключающие: вы можете указать только один из них.Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 60s idle_timeout: 5s auto_host_rewrite: false - name: my-third-route grpc: match: fqmn: prefix_match: myapp/ route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "4" disable_security_profile: true - name: my-second-route grpc: match: fqmn: prefix_match: helloworld/ route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s rate_limit: requests_per_ip: per_second: "4" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "100"
Подробную информацию о команде
yc alb virtual-host insert-grpc-route
с полным перечнем параметров см. в справочнике CLI. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Примечание
Маршруты виртуального хоста будут применяться к поступающим запросам в том порядке, в котором они описаны в конфигурационном файле Terraform.
-
Опишите в конфигурационном файле параметры маршрута как ресурса, вложенного в ресурс типа yandex_alb_virtual_host
. С помощью Terraform вы можете добавлять в виртуальный хост разные типы маршрутов:HTTPgRPC... route { name = "<имя_маршрута>" disable_security_profile = true|false http_route { http_match { http_method = ["<HTTP-метод_1>","<HTTP-метод_2>",...,"<HTTP-метод_n>"] path { prefix = "<префикс_пути_запроса>/" # или exact = "<путь_запроса>" # или regex = "<регулярное_выражение>" } } http_route_action { backend_group_id = "<идентификатор_группы_бэкендов>" host_rewrite = "<значение_заголовка_Host>" timeout = "<таймаут_соединения>s" idle_timeout = "<таймаут-простоя>s" prefix_rewrite = "<новый_префикс_пути_запроса>/" rate_limit { all_requests { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } requests_per_ip { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } } } } } ...
Где:
-
route
— описание маршрута виртуального хоста:name
— имя маршрута.disable_security_profile
— (опционально) опция отключения профиля безопасности сервиса Yandex Smart Web Security. Возможные значения:true
(профиль отключен) илиfalse
(профиль включен). По умолчанию профиль безопасности включен (значениеfalse
).
-
http_route
— описание маршрута для HTTP-трафика:-
http_match
— (опционально) параметр для фильтрации входящих HTTP-запросов:-
http_method
— (опционально) список HTTP-методов , запросы с которыми будут маршрутизироваться. По умолчанию маршрутизируются запросы с любыми методами. -
path
— (опционально) параметры для фильтрации пути входящего запроса:exact
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.prefix
— маршрутизировать запросы, путь в которых начинается с заданного префикса.regex
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Параметры
exact
,prefix
иregex
— взаимоисключающие: вы можете использовать только один из них.
-
-
http_route_action
— параметр для указания действия с HTTP-трафиком.backend_group_id
— идентификатор группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых создается маршрут.host_rewrite
— (опционально) замена заголовка Host в запросе на указанное значение. Вместо параметраhost_rewrite
вы можете указать параметрauto_host_rewrite
— в этом случае заголовок Host в запросе автоматически будет заменяться на адрес целевой виртуальной машины.timeout
— (опционально) максимальное время, на которое может быть установлено соединение, в секундах. Значение по умолчанию — 60 секунд.idle_timeout
— (опционально) максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных. Если не задано, соединение без передачи данных будет сразу разрываться.prefix_rewrite
— (опционально) значение, на которое будет заменен путь или часть пути запроса, указанные в параметреpath
.-
rate_limit
— (опционально) параметр для ограничения количества запросов за единицу времени:-
all_requests
— (опционально) ограничение на все входящие запросы:per_second
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них. -
requests_per_ip
— (опционально) ограничение на входящие запросы с одного IP-адреса:per_second
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них.
-
-
... route { name = "<имя_маршрута>" disable_security_profile = true|false grpc_route { grpc_match { fqmn { prefix = "/<префикс_FQMN_запроса>" # или exact = "<FQMN_запроса>" # или regex = "<регулярное_выражение>" } } grpc_route_action { backend_group_id = "<идентификатор_группы_бэкендов>" host_rewrite = "<значение_заголовка_Host>" max_timeout = "<таймаут_соединения>s" idle_timeout = "<таймаут-простоя>s" rate_limit { all_requests { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } requests_per_ip { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } } } } } ...
Где:
-
route
— описание маршрута виртуального хоста:name
— имя маршрута.disable_security_profile
— (опционально) опция отключения профиля безопасности сервиса Yandex Smart Web Security. Возможные значения:true
(профиль отключен) илиfalse
(профиль включен). По умолчанию профиль безопасности включен (значениеfalse
).
-
grpc_route
— описание маршрута для gRPC-трафика:-
grpc_match.fqmn
— (опционально) параметр для фильтрации входящих gRPC-запросов по FQMN:exact
— маршрутизировать запросы, FQMN в которых идентичен заданному.prefix
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.regex
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Параметры
exact
,prefix
иregex
— взаимоисключающие: вы можете использовать только один из них. -
grpc_route_action
— параметр для указания действия с gRPC-трафиком.backend_group_id
— идентификатор группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых создается маршрут.host_rewrite
— (опционально) замена заголовка Host в запросе на указанное значение. Вместо параметраhost_rewrite
вы можете указать параметрauto_host_rewrite
— в этом случае заголовок Host в запросе автоматически будет заменяться на адрес целевой виртуальной машины.max_timeout
— (опционально) максимальный таймаут ожидания запроса в секундах. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута. Значение по умолчанию — 60 секунд.idle_timeout
— (опционально) максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных. Если не задано, соединение без передачи данных будет сразу разрываться.-
rate_limit
— (опционально) параметр для ограничения количества запросов за единицу времени:-
all_requests
— (опционально) ограничение на все входящие запросы:per_second
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них. -
requests_per_ip
— (опционально) ограничение на входящие запросы с одного IP-адреса:per_second
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них.
-
-
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера: yandex_alb_virtual_host
. -
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера>
-
Воспользуйтесь методом REST API update для ресурса VirtualHost или вызовом gRPC API VirtualHostService/Update.
Примечание
Маршруты виртуального хоста будут применяться к поступающим запросам в том порядке, в котором они описаны в теле запроса.
Изменить маршрут
Чтобы изменить маршрут в виртуальном хосте HTTP-роутера:
-
В консоли управления
выберите каталог, в котором вы будете изменять маршрут виртуального хоста. -
В списке сервисов выберите Application Load Balancer.
-
На панели слева выберите
HTTP-роутеры и выберите HTTP-роутер, в котором находится нужный маршрут. -
На открывшейся странице в секции Виртуальные хосты в блоке с виртуальным хостом, в котором находится нужный маршрут, в строке с именем нужного маршрута нажмите значок
и выберите Редактировать. В открывшемся окне, в зависимости от типа маршрута:HTTPgRPC-
В поле Тип выберите
HTTP
. -
В поле Путь выберите одну из опций:
Совпадает с
— чтобы маршрутизировать запросы, путь в которых идентичен пути, заданному в текстовом поле справа. Например, чтобы маршрутизировать все запросы, укажите путь/
.Начинается с
— чтобы маршрутизировать запросы, путь в которых начинается с префикса, заданного в текстовом поле справа.Регулярное выражение
— чтобы маршрутизировать запросы, путь в которых удовлетворяет регулярному выражению стандарта RE2 , заданному в текстовом поле справа. Например:[a-z]{10}[0-9]{3}
.
-
В поле Методы HTTP выберите нужные HTTP-методы
, запросы с которыми необходимо маршрутизировать. -
В поле Действие выберите одну из опций:
Маршрутизация
,Перенаправление
илиОтвет
. В зависимости от выбранной опции:МаршрутизацияПеренаправлениеОтвет-
В поле Группа бэкендов выберите группу бэкендов, расположенную в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.
-
(Опционально) В поле Замена пути или начала укажите путь, по которому HTTP-роутер должен перенаправлять трафик. Если ранее в поле Путь вы выбрали опцию
Совпадает с
, путь будет полностью заменен. Если была выбрана опцияНачинается с
, будет изменено только начало. -
(Опционально) В поле Замена заголовка Host выберите одну из опций:
none
— заголовок Host в запросе не изменяется.rewrite
— заголовок Host в запросе заменяется на указанное значение.auto
— заголовок Host в запросе автоматически заменяется на адрес целевой виртуальной машины.
-
(Опционально) Включите опции Ограничивать все запросы и/или Ограничивать запросы с одного IP и задайте соответствующие ограничения на количество запросов, которые будут обрабатываться для данного маршрута за единицу времени.
-
(Опционально) В поле Таймаут, с укажите максимальное время, на которое может быть установлено соединение.
-
(Опционально) В поле Таймаут простоя, с укажите максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных.
-
(Опционально) В поле Допустимые значения заголовка Upgrade:
- (Опционально) Укажите список протоколов, на которые группа бэкендов может перейти в рамках TCP-соединения по запросу клиента. Используйте кнопку Добавить тип модификации, чтобы добавлять дополнительные протоколы.
- (Опционально) Включите опцию WebSocket, если вы хотите использовать протокол WebSocket
.
-
В поле Код состояния HTTP выберите код, по которому будет осуществляться перенаправление:
301 Moved Permanently
;302 Found
;303 See Other
;307 Temporary Redirect
;308 Permanent Redirect
.
-
(Опционально) Включите опцию Замена пути или начала и укажите тип модификации пути, по которому HTTP-роутер должен перенаправлять трафик:
Весь путь
— чтобы полностью заменить путь запроса на значение, заданное в поле справа.Начало
— чтобы изменить префикс пути запроса на значение, заданное в поле справа.
Примечание
Если в поле Путь выше вы выбрали опцию
Совпадает с
, путь будет полностью заменен, даже если в поле Замена пути или начала выбрана опцияНачало
. -
(Опционально) Включите опцию Удалить query-параметры, чтобы удалять из запросов все query-параметры.
-
(Опционально) Включите опцию Изменить схему, чтобы изменять схему в запросах на схему, заданную в поле справа.
Если в исходном URI использована схема
http
(https
) и указан порт80
(443
), при изменении схемы порт будет удален. -
(Опционально) Включите опцию Изменить хост и в поле справа укажите новый хост.
-
(Опционально) Включите опцию Изменить порт и в поле справа укажите новый порт.
-
В поле Код состояния HTTP выберите код статического ответа, который будет отправляться на запрос.
-
В поле Тело ответа задайте тело статического ответа на запросы. Для этого нажмите кнопку Выбрать и в открывшемся окне:
-
В поле Способ выберите:
Файл
— чтобы выбрать текстовый файл, содержащий тело ответа.Текст
— чтобы указать текст ответа в текстовом поле.- Нажмите кнопку Добавить.
-
-
-
В поле Тип выберите
gRPC
. -
В поле FQMN выберите одну из опций:
Совпадает с
— чтобы маршрутизировать запросы, FQMN которых идентичен FQMN, заданному в текстовом поле справа.Начинается с
— чтобы маршрутизировать запросы, FQMN в которых начинается с префикса, заданного в текстовом поле справа. Например, вы можете указать первое слово в имени сервиса:/helloworld
.Регулярное выражение
— чтобы маршрутизировать запросы, FQMN в которых удовлетворяет регулярному выражению стандарта RE2 , заданному в текстовом поле справа.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры. -
В поле Действие выберите одну из опций:
Маршрутизация
илиОтвет
. В зависимости от выбранной опции:МаршрутизацияОтвет-
В поле Группа бэкендов выберите группу бэкендов, расположенную в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых вы создаете маршрут.
-
(Опционально) В поле Замена заголовка Host выберите одну из опций:
none
— заголовок Host в запросе не изменяется.rewrite
— заголовок Host в запросе заменяется на указанное значение.auto
— заголовок Host в запросе автоматически заменяется на адрес целевой виртуальной машины.
-
(Опционально) Включите опции Ограничивать все запросы и/или Ограничивать запросы с одного IP и задайте соответствующие ограничения на количество запросов, которые будут обрабатываться для данного маршрута за единицу времени.
- (Опционально) В поле Максимальный таймаут, с укажите максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовок
grpc-timeout
с меньшим значением таймаута. - (Опционально) В поле Таймаут простоя, с укажите максимальное время, в течение которого соединение может простаивать без передачи данных.
В поле Код состояния gRPC выберите код статического ответа, отправляемого балансировщиком в ответ на запрос:
OK
;INVALID_ARGUMENT
;NOT_FOUND
;PERMISSION_DENIED
;UNAUTHENTICATED
;UNIMPLEMENTED
;INTERNAL
;UNAVAILABLE
.
-
-
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
С помощью Yandex Cloud CLI вы можете изменять в виртуальном хосте разные типы маршрутов:
-
Посмотрите описание команды CLI для изменения маршрута виртуального хоста:
yc alb virtual-host update-http-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы получить список маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route http: match: path: prefix_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 60s auto_host_rewrite: false modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
-
Измените маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host update-http-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --match-http-method <метод_1>,<метод_2>,...<метод_n> \ --exact-path-match <полный_путь> \ --prefix-path-match <префикс_пути> \ --regex-path-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором находится маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором находится маршрут. -
--match-http-method
— список HTTP-методов , запросы с которыми необходимо маршрутизировать. Например:--match-http-method GET,POST,OPTIONS
.Чтобы очистить заданный для маршрута список HTTP-методов, передайте в команде параметр
--clear-method-match
. -
Параметры с условиями маршрутизации на основе пути:
--exact-path-match
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.--prefix-path-match
— маршрутизировать запросы, путь в которых начинается с заданного префикса. Например:myapp/
.--regex-path-match
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Примечание
Параметры
--exact-path-match
,--prefix-path-match
и--regex-path-match
— взаимоисключающие: вы можете использовать только один из них.Чтобы очистить заданные для маршрута условия маршрутизации на основе пути, передайте в команде параметр
--clear-path-match
. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер, виртуальный хост и маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-timeout
— максимальное время в секундах, на которое может быть установлено соединение по запросу.Чтобы очистить заданное для маршрута максимальное время соединения, передайте в команде параметр
--clear-request-timeout
. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных.Чтобы очистить заданное для маршрута максимальное время простоя, передайте в команде параметр
--clear-idle-timeout
. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
Чтобы очистить заданные для маршрута настройки частоты запросов, передайте в команде параметр
--clear-rate-limit
. -
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.Чтобы включить для маршрута профиль безопасности, который был отключен ранее, передайте в команде параметр
--disable-security-profile=false
.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route http: match: http_method: - POST - PATCH path: exact_match: / route: backend_group_id: ds7dnf2s5dco******** timeout: 12s idle_timeout: 6s host_rewrite: myapp prefix_rewrite: yourapp/ rate_limit: requests_per_ip: per_second: "5" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
Подробную информацию о команде
yc alb virtual-host update-http-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для изменения маршрута виртуального хоста:
yc alb virtual-host update-grpc-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы получить список маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s host_rewrite: myapp rate_limit: all_requests: per_second: "12" requests_per_ip: per_second: "6" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
-
Измените маршрут, указав его имя и дополнительные параметры:
yc alb virtual-host update-grpc-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста> \ --exact-fqmn-match <полный_FQMN> \ --prefix-fqmn-match <префикс_FQMN> \ --regex-fqmn-match <регулярное_выражение> \ --backend-group-name <имя_группы_бэкендов> \ --request-max-timeout <таймаут_запроса>s \ --request-idle-timeout <таймаут_ожидания_запроса>s \ --rate-limit rps=<лимит_запросов>,requests-per-ip \ --disable-security-profile
Где:
-
--http-router-name
— имя HTTP-роутера, в котором находится маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором находится маршрут. -
Параметры с условиями маршрутизации на основе FQMN:
--exact-fqmn-match
— маршрутизировать запросы, FQMN в которых идентичен заданному.--prefix-fqmn-match
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.--regex-fqmn-match
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Важно
FQMN должно начинаться с косой черты
/
и содержать часть полного названия сервиса, на который перенаправляется вызов процедуры.Примечание
Параметры
--exact-fqmn-match
,--prefix-fqmn-match
и--regex-fqmn-match
— взаимоисключающие: вы можете использовать только один из них.Чтобы очистить заданные для маршрута условия маршрутизации на основе FQMN, передайте в команде параметр
--clear-fqmn-match
. -
--backend-group-name
— имя группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер, виртуальный хост и маршрут.Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре
--backend-group-id
. -
--request-max-timeout
— максимальное время, на которое может быть установлено соединение. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута.Чтобы очистить заданное для маршрута значение таймаута соединения, передайте в команде параметр
--clear-max-timeout
. -
--request-idle-timeout
— максимальное время в секундах, в течение которого соединение может простаивать без передачи данных.Чтобы очистить заданное для маршрута значение максимального времени простоя, передайте в команде параметр
--clear-idle-timeout
. -
--rate-limit
— ограничение на частоту запросов. Возможные свойства:rps
илиrpm
— количество запросов, которые можно принять в секунду или в минуту.all-requests
— ограничение на все входящие запросы.requests-per-ip
— ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
Для одного маршрута вы можете задать только один вид ограничения: либо свойство
all-requests
, либо —requests-per-ip
.Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
Чтобы очистить заданные для маршрута настройки частоты запросов, передайте в команде параметр
--clear-rate-limit
. -
--disable-security-profile
— параметр, отключающий для маршрута использование профиля безопасности сервиса Yandex Smart Web Security, заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить WAF и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее см. в разделе Профили безопасности. Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.Чтобы включить для маршрута профиль безопасности, который был отключен ранее, передайте в команде параметр
--disable-security-profile=false
.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-route grpc: match: fqmn: exact_match: /myapp route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 12s idle_timeout: 6s host_rewrite: myapp rate_limit: all_requests: per_second: "12" requests_per_ip: per_second: "6" disable_security_profile: true modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
Подробную информацию о команде
yc alb virtual-host update-grpc-route
с полным перечнем параметров см. в справочнике CLI. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Измените в конфигурационном файле параметры маршрута как ресурса, вложенного в ресурс типа yandex_alb_virtual_host
. С помощью Terraform вы можете изменять в виртуальном хосте разные типы маршрутов:HTTPgRPC... route { name = "<имя_маршрута>" disable_security_profile = true|false http_route { http_match { http_method = ["<HTTP-метод_1>","<HTTP-метод_2>",...,"<HTTP-метод_n>"] path { prefix = "<префикс_пути_запроса>/" # или exact = "<путь_запроса>" # или regex = "<регулярное_выражение>" } } http_route_action { backend_group_id = "<идентификатор_группы_бэкендов>" host_rewrite = "<значение_заголовка_Host>" timeout = "<таймаут_соединения>s" idle_timeout = "<таймаут-простоя>s" prefix_rewrite = "<новый_префикс_пути_запроса>/" rate_limit { all_requests { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } requests_per_ip { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } } } } } ...
Где:
-
route
— описание маршрута виртуального хоста:name
— имя маршрута.disable_security_profile
— (опционально) опция отключения профиля безопасности сервиса Yandex Smart Web Security. Возможные значения:true
(профиль отключен) илиfalse
(профиль включен). По умолчанию профиль безопасности включен (значениеfalse
).
-
http_route
— описание маршрута для HTTP-трафика:-
http_match
— (опционально) параметр для фильтрации входящих HTTP-запросов:-
http_method
— (опционально) список HTTP-методов , запросы с которыми будут маршрутизироваться. По умолчанию маршрутизируются запросы с любыми методами. -
path
— (опционально) параметры для фильтрации пути входящего запроса:exact
— маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь/
.prefix
— маршрутизировать запросы, путь в которых начинается с заданного префикса.regex
— маршрутизировать запросы, путь в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:[a-z]{10}[0-9]{3}\/
.
Параметры
exact
,prefix
иregex
— взаимоисключающие: вы можете использовать только один из них.
-
-
http_route_action
— параметр для указания действия с HTTP-трафиком.backend_group_id
— идентификатор группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых создается маршрут.host_rewrite
— (опционально) замена заголовка Host в запросе на указанное значение. Вместо параметраhost_rewrite
вы можете указать параметрauto_host_rewrite
— в этом случае заголовок Host в запросе автоматически будет заменяться на адрес целевой виртуальной машины.timeout
— (опционально) максимальное время, на которое может быть установлено соединение, в секундах. Значение по умолчанию — 60 секунд.idle_timeout
— (опционально) максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных. Если не задано, соединение без передачи данных будет сразу разрываться.prefix_rewrite
— (опционально) значение, на которое будет заменен путь или часть пути запроса, указанные в параметреpath
.-
rate_limit
— (опционально) параметр для ограничения количества запросов за единицу времени:-
all_requests
— (опционально) ограничение на все входящие запросы:per_second
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них. -
requests_per_ip
— (опционально) ограничение на входящие запросы с одного IP-адреса:per_second
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них.
-
-
... route { name = "<имя_маршрута>" disable_security_profile = true|false grpc_route { grpc_match { fqmn { prefix = "/<префикс_FQMN_запроса>" # или exact = "<FQMN_запроса>" # или regex = "<регулярное_выражение>" } } grpc_route_action { backend_group_id = "<идентификатор_группы_бэкендов>" host_rewrite = "<значение_заголовка_Host>" max_timeout = "<таймаут_соединения>s" idle_timeout = "<таймаут-простоя>s" rate_limit { all_requests { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } requests_per_ip { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } } } } } ...
Где:
-
route
— описание маршрута виртуального хоста:name
— имя маршрута.disable_security_profile
— (опционально) опция отключения профиля безопасности сервиса Yandex Smart Web Security. Возможные значения:true
(профиль отключен) илиfalse
(профиль включен). По умолчанию профиль безопасности включен (значениеfalse
).
-
grpc_route
— описание маршрута для gRPC-трафика:-
grpc_match.fqmn
— (опционально) параметр для фильтрации входящих gRPC-запросов по FQMN:exact
— маршрутизировать запросы, FQMN в которых идентичен заданному.prefix
— маршрутизировать запросы, FQMN в которых начинается с заданного префикса. Например, вы можете указать первое слово в имени сервиса:/helloworld
.regex
— маршрутизировать запросы, FQMN в которых удовлетворяет заданному регулярному выражению стандарта RE2 . Например:\/[a-z]{10}[0-9]{3}
.
Параметры
exact
,prefix
иregex
— взаимоисключающие: вы можете использовать только один из них. -
grpc_route_action
— параметр для указания действия с gRPC-трафиком.backend_group_id
— идентификатор группы бэкендов, расположенной в том же каталоге, в котором находятся HTTP-роутер и виртуальный хост, для которых создается маршрут.host_rewrite
— (опционально) замена заголовка Host в запросе на указанное значение. Вместо параметраhost_rewrite
вы можете указать параметрauto_host_rewrite
— в этом случае заголовок Host в запросе автоматически будет заменяться на адрес целевой виртуальной машины.max_timeout
— (опционально) максимальный таймаут ожидания запроса в секундах. Клиент может указать в запросе HTTP-заголовокgrpc-timeout
с меньшим значением таймаута. Значение по умолчанию — 60 секунд.idle_timeout
— (опционально) максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных. Если не задано, соединение без передачи данных будет сразу разрываться.-
rate_limit
— (опционально) параметр для ограничения количества запросов за единицу времени:-
all_requests
— (опционально) ограничение на все входящие запросы:per_second
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них. -
requests_per_ip
— (опционально) ограничение на входящие запросы с одного IP-адреса:per_second
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну секунду.per_minute
— максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну минуту.
Параметры
per_second
иper_minute
— взаимоисключающие: вы можете использовать только один из них.
-
-
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера: yandex_alb_virtual_host
. -
-
Обновите ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление, изменение ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера>
-
Воспользуйтесь методом REST API updateRoute для ресурса VirtualHost или вызовом gRPC API VirtualHostService/UpdateRoute.
Изменить порядок маршрутов
Чтобы изменить порядок маршрутов в виртуальном хосте HTTP-роутера:
-
В консоли управления
выберите каталог, в котором вы будете изменять порядок маршрутов виртуального хоста. -
В списке сервисов выберите Application Load Balancer.
-
На панели слева выберите
HTTP-роутеры и выберите HTTP-роутер, в котором находится нужный виртуальный хост. -
На открывшейся странице в секции Виртуальные хосты в блоке с нужным виртуальным хостом нажмите значок
и выберите Редактировать. -
Чтобы изменить порядок маршрутов, нажмите кнопку Сортировать и в открывшемся окне:
- С помощью мышки методом перетаскивания выстройте нужный порядок маршрутов.
- Нажмите кнопку Сохранить.
-
Нажмите кнопку Сохранить.
В Yandex Cloud CLI в настоящий момент нет отдельной команды, позволяющей изменять порядок маршрутов в виртуальном хосте.
Чтобы изменить порядок маршрутов с помощью CLI, воспользуйтесь следующим порядком действий:
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Примечание
Маршруты виртуального хоста будут применяться к поступающим запросам в том порядке, в котором они описаны в конфигурационном файле Terraform.
-
Измените в конфигурационном файле порядок маршрутов как ресурсов, вложенных в ресурс типа yandex_alb_virtual_host
.Пример конфигурации виртуального хоста:
resource "yandex_alb_virtual_host" "my-virtual-host" { name = "test-virtual-host" http_router_id = "ds76j5n6a39g********" rate_limit { all_requests { per_second = 5 } requests_per_ip { per_second = 3 } } route { name = "my-first-http-route" disable_security_profile = false http_route { http_match { http_method = ["GET","POST"] path { prefix = "myapp/" } } http_route_action { backend_group_id = "ds7dnf2s5dco********" host_rewrite = "myapp" idle_timeout = "3s" prefix_rewrite = "yourapp/" rate_limit { all_requests { per_second = 12 } requests_per_ip { per_minute = 120 } } timeout = "10s" } } } route { name = "my-first-grpc-route" disable_security_profile = false grpc_route { grpc_match { fqmn { prefix = "/" } } grpc_route_action { backend_group_id = "ds7dq9nsrgpc********" host_rewrite = "myapp" idle_timeout = "5s" max_timeout = "10s" rate_limit { all_requests { per_minute = 0 per_second = 12 } requests_per_ip { per_minute = 0 per_second = 6 } } } } } authority = ["example.com"] modify_request_headers { name = "Accept-Language" append = "ru-RU" } modify_response_headers { name = "Accept-Language" append = "ru-RU" } route_options { security_profile_id = "fevu5fnuk6vf********" } }
Информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера: yandex_alb_virtual_host
. -
Обновите ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление, порядок ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера>
-
Воспользуйтесь методом REST API update для ресурса VirtualHost или вызовом gRPC API VirtualHostService/Update.
Примечание
Маршруты виртуального хоста будут применяться к поступающим запросам в том порядке, в котором они описаны в теле запроса.
Удалить маршрут
Чтобы удалить маршрут из виртуального хоста HTTP-роутера:
- В консоли управления
выберите каталог, в котором вы будете удалять маршрут виртуального хоста. - В списке сервисов выберите Application Load Balancer.
- На панели слева выберите
HTTP-роутеры и выберите HTTP-роутер, в котором находится нужный маршрут. - На открывшейся странице в секции Виртуальные хосты в блоке с виртуальным хостом, в котором находится нужный маршрут, в строке с именем нужного маршрута нажмите значок
и выберите Удалить. - В открывшемся окне подтвердите удаление.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
С помощью Yandex Cloud CLI вы можете удалять из виртуального хоста разные типы маршрутов:
-
Посмотрите описание команды CLI для удаления маршрута виртуального хоста:
yc alb virtual-host remove-http-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы получить список маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-http-route http: match: http_method: - GET - POST path: prefix_match: myapp/ route: backend_group_id: ds7dnf2s5dco******** timeout: 10s idle_timeout: 3s host_rewrite: myapp prefix_rewrite: yourapp/ rate_limit: all_requests: per_second: "12" requests_per_ip: per_minute: "120" - name: my-first-grpc-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s host_rewrite: myapp rate_limit: all_requests: per_second: "12" requests_per_ip: per_second: "6" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
-
Удалите маршрут, указав его имя, а также данные виртуального хоста и HTTP-роутера:
yc alb virtual-host remove-http-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста>
Где:
-
--http-router-name
— имя HTTP-роутера, в котором находится маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором находится маршрут.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-grpc-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s host_rewrite: myapp rate_limit: all_requests: per_second: "12" requests_per_ip: per_second: "6" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
Подробную информацию о команде
yc alb virtual-host remove-http-route
с полным перечнем параметров см. в справочнике CLI. -
-
Посмотрите описание команды CLI для удаления маршрута виртуального хоста:
yc alb virtual-host remove-grpc-route --help
-
Посмотрите список HTTP-роутеров в каталоге по умолчанию:
yc alb http-router list
Результат:
+----------------------+--------------------+-------------+-------------+ | ID | NAME | VHOST COUNT | ROUTE COUNT | +----------------------+--------------------+-------------+-------------+ | ds76j5n6a39g******** | sample-http-router | 1 | 2 | | ds76jk27sdf3******** | new-http-router | 2 | 7 | +----------------------+--------------------+-------------+-------------+
-
Посмотрите список виртуальных хостов в нужном HTTP-роутере, указав его имя или идентификатор соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host list \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
+-------------------+-------------+-------------+----------------------+ | NAME | AUTHORITIES | ROUTE COUNT | SECURITY PROFILE ID | +-------------------+-------------+-------------+----------------------+ | my-virtual-host | * | 1 | fevu5fnuk6vf******** | | test-virtual-host | example.com | 2 | fevug3d25bv6******** | +-------------------+-------------+-------------+----------------------+
-
Чтобы получить список маршрутов в виртуальном хосте, выполните команду, указав в ней имя виртуального хоста и имя или идентификатор HTTP-роутера соответственно в параметре
--http-router-name
или--http-router-id
:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера> \ --http-router-id <идентификатор_HTTP-роутера>
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-http-route http: match: http_method: - GET - POST path: prefix_match: myapp/ route: backend_group_id: ds7dnf2s5dco******** timeout: 10s idle_timeout: 3s host_rewrite: myapp prefix_rewrite: yourapp/ rate_limit: all_requests: per_second: "12" requests_per_ip: per_minute: "120" - name: my-first-grpc-route grpc: match: fqmn: prefix_match: / route: backend_group_id: ds7dq9nsrgpc******** max_timeout: 10s idle_timeout: 5s host_rewrite: myapp rate_limit: all_requests: per_second: "12" requests_per_ip: per_second: "6" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
-
Удалите маршрут, указав его имя, а также данные виртуального хоста и HTTP-роутера:
yc alb virtual-host remove-grpc-route <имя_маршрута> \ --http-router-name <имя_HTTP-роутера> \ --virtual-host-name <имя_виртуального_хоста>
Где:
-
--http-router-name
— имя HTTP-роутера, в котором находится маршрут.Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре
--http-router-id
. -
--virtual-host-name
— имя виртуального хоста, в котором находится маршрут.
Результат:
name: test-virtual-host authority: - example.com routes: - name: my-first-http-route http: match: http_method: - GET - POST path: prefix_match: myapp/ route: backend_group_id: ds7dnf2s5dco******** timeout: 10s idle_timeout: 3s host_rewrite: myapp prefix_rewrite: yourapp/ rate_limit: all_requests: per_second: "12" requests_per_ip: per_minute: "120" modify_request_headers: - name: Accept-Language append: ru-RU modify_response_headers: - name: Accept-Language append: ru-RU route_options: security_profile_id: fevu5fnuk6vf******** rate_limit: all_requests: per_second: "5" requests_per_ip: per_second: "3"
Подробную информацию о команде
yc alb virtual-host remove-grpc-route
с полным перечнем параметров см. в справочнике CLI. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Удалите в конфигурационном файле описание маршрута как ресурса, вложенного в ресурс типа yandex_alb_virtual_host
.Пример конфигурации виртуального хоста:
resource "yandex_alb_virtual_host" "my-virtual-host" { name = "test-virtual-host" http_router_id = "ds76j5n6a39g********" rate_limit { all_requests { per_second = 5 } requests_per_ip { per_second = 3 } } route { name = "my-first-http-route" disable_security_profile = false http_route { http_match { http_method = ["GET","POST"] path { prefix = "myapp/" } } http_route_action { backend_group_id = "ds7dnf2s5dco********" host_rewrite = "myapp" idle_timeout = "3s" prefix_rewrite = "yourapp/" rate_limit { all_requests { per_second = 12 } requests_per_ip { per_minute = 120 } } timeout = "10s" } } } route { name = "my-first-grpc-route" disable_security_profile = false grpc_route { grpc_match { fqmn { prefix = "/" } } grpc_route_action { backend_group_id = "ds7dq9nsrgpc********" host_rewrite = "myapp" idle_timeout = "5s" max_timeout = "10s" rate_limit { all_requests { per_minute = 0 per_second = 12 } requests_per_ip { per_minute = 0 per_second = 6 } } } } } authority = ["example.com"] modify_request_headers { name = "Accept-Language" append = "ru-RU" } modify_response_headers { name = "Accept-Language" append = "ru-RU" } route_options { security_profile_id = "fevu5fnuk6vf********" } }
Информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера: yandex_alb_virtual_host
. -
Обновите ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление, удаление ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc alb virtual-host get <имя_виртуального_хоста> \ --http-router-name <имя_HTTP-роутера>
-
Воспользуйтесь методом REST API removeRoute для ресурса VirtualHost или вызовом gRPC API VirtualHostService/RemoveRoute.