Управлять маршрутами
Маршруты состоят из набора условий (предиката), на основании которых балансировщик выбирает дальнейшее направление для запроса, и действия над ним. Доступные условия и действия зависят от типа маршрута.
Создать маршрут
Чтобы создать маршрут в виртуальном хосте 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-роутера>Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с HTTP-роутерами и виртуальными хостами Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию HTTP-роутера и виртуального хоста блоки
timeouts(ресурсыyandex_alb_http_routerиyandex_alb_virtual_hostсоответственно).Пример:
resource "yandex_alb_http_router" "<имя_роутера>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } } -
Воспользуйтесь методом 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-роутера>Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с HTTP-роутерами и виртуальными хостами Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию HTTP-роутера и виртуального хоста блоки
timeouts(ресурсыyandex_alb_http_routerиyandex_alb_virtual_hostсоответственно).Пример:
resource "yandex_alb_http_router" "<имя_роутера>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } } -
Воспользуйтесь методом 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-роутера>Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с HTTP-роутерами и виртуальными хостами Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию HTTP-роутера и виртуального хоста блоки
timeouts(ресурсыyandex_alb_http_routerиyandex_alb_virtual_hostсоответственно).Пример:
resource "yandex_alb_http_router" "<имя_роутера>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } } -
Воспользуйтесь методом REST API update для ресурса VirtualHost или вызовом gRPC API VirtualHostService/Update.
Примечание
Маршруты виртуального хоста будут применяться к поступающим запросам в том порядке, в котором они описаны в теле запроса.
Модифицировать параметры HTTP-запросов
Маршруты виртуальных хостов в HTTP-роутерах Yandex Application Load Balancer позволяют при необходимости модифицировать параметры HTTP-запросов, заменяя части запроса, удовлетворяющие регулярному выражению
Например, такая модификация может быть полезна для управления версиями API, для микросервисной маршрутизации, для обеспечения обратной совместимости и нормализации URL, а также при A/B тестировании
Модифицировать параметры HTTP-запросов в маршрутах вы можете с помощью Yandex Cloud CLI, Terraform или API.
Пример модификации параметров HTTP-запросов
В качестве примера приведем решение для ситуации, которая может возникнуть в результате внедрения в сервисе новой версии API-интерфейса. Предположим, что изначально единственная версия API в сервисе была доступна по адресу /api/users. После появления новой версии интерфейса (v2) новый интерфейс должен быть доступен по адресу /api/v2/users, а старый — по адресу /api/v1/users.
Запросы к новому API-интерфейсу приходят сразу на адрес /api/v2/users, и для них достаточно настроить обычное правило маршрутизации, которое направит эти запросы в группу бэкендов с новым API api-v2-backend.
Запросы к старому API продолжают приходить на адрес /api/users, и этот адрес в запросах вы можете заменить на адрес /api/v1/users. Для этого вы можете использовать модификацию параметров HTTP-запроса в настройках маршрута.
Чтобы модифицировать параметры HTTP-запроса в маршруте виртуального хоста, при выполнении команды создания или изменения маршрута для HTTP-трафика задайте необходимые настройки замены в параметре --path-regex-rewrite. В приведенной ниже команде модификация запроса настраивается при создании маршрута:
yc alb virtual-host append-http-route <имя_маршрута> \
--virtual-host-name <имя_виртуального_хоста> \
--http-router-name <имя_HTTP-роутера> \
--backend-group-name api-v1-backend \
--prefix-path-match '/api/users/' \
--path-regex-rewrite 'regex=^/api/users/(.*),substitute=/api/v1/users/\\1'
Где:
-
--backend-group-name— имя группы бэкендов, в которой доступен старый API-интерфейс. -
--prefix-path-match— фильтр с указанием префикса пути, по которому будут отбираться запросы, поступающие в создаваемый маршрут. -
--path-regex-rewrite— параметр, задающий настройки замены в пути HTTP-запроса:regex— регулярное выражение стандарта RE2, при соответствии которому строка пути запроса будет изменена. В приведенном примере регулярное выражение описывает путь, начинающийся с префикса/api/users/, после которого следует любое количество любых символов (или не следует ничего). При этом все, что следует после префикса, сохраняется в группу (карман).substitute— строка, на которую будет заменен путь, соответствующий регулярному выражению, которое задано в свойствеregex. В приведенном примере путь будет заменен на строку, состоящую из префикса/api/v1/users/и содержимого группы (кармана), которое было сохранено в регулярном выражении.
Примечание
Параметры
--path-regex-rewriteи--path-prefix-rewrite— взаимоисключающие: вы можете использовать только один из них.
Результат:
name: my-virtual-host
routes:
- name: my-http-route
http:
match:
path:
prefix_match: /api/users/
route:
backend_group_id: ds7m9iupbcaq********
regex_rewrite:
regex: ^/api/users/(.*)
substitute: /api/v1/users/\\1
Подробную информацию о команде yc alb virtual-host append-http-route с полным перечнем параметров см. в справочнике CLI.
-
Чтобы модифицировать параметры HTTP-запроса, в конфигурационном файле Terraform в параметрах HTTP-маршрута как ресурса, вложенного в ресурс типа yandex_alb_virtual_host, задайте параметр
regex_rewrite:... route { name = "<имя_маршрута>" disable_security_profile = true|false http_route { http_match { http_method = ["<HTTP-метод_1>","<HTTP-метод_2>",...,"<HTTP-метод_n>"] path { prefix = "/api/users/" # или exact = "<путь_запроса>" # или regex = "<регулярное_выражение>" } } http_route_action { backend_group_id = "ds7m9iupbcaq********" host_rewrite = "<значение_заголовка_Host>" timeout = "<таймаут_соединения>s" idle_timeout = "<таймаут-простоя>s" regex_rewrite { regex = "^/api/users/(.*)" substitute = "/api/v1/users/\\1" } rate_limit { all_requests { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } requests_per_ip { per_second = <количество_запросов_в_секунду> # или per_minute = <количество_запросов_в_минуту> } } } } } ...Где:
-
route— описание маршрута виртуального хоста:-
http_route— описание маршрута для HTTP-трафика:-
path— параметр для фильтрации пути входящего запроса:prefix— фильтр с указанием префикса пути, по которому будут отбираться запросы, поступающие в создаваемый маршрут.
-
-
http_route_action— параметр для указания действия с HTTP-трафиком:-
backend_group_id— идентификатор группы бэкендов, в которой доступен старый API-интерфейс. -
regex_rewrite— параметр, задающий настройки замены в пути HTTP-запроса:regex— регулярное выражение стандарта RE2, при соответствии которому строка пути запроса будет изменена. В приведенном примере регулярное выражение описывает путь, начинающийся с префикса/api/users/, после которого следует любое количество любых символов (или не следует ничего). При этом все, что следует после префикса, сохраняется в группу (карман).substitute— строка, на которую будет заменен путь, соответствующий регулярному выражению, которое задано в свойствеregex. В приведенном примере путь будет заменен на строку, состоящую из префикса/api/v1/users/и содержимого группы (кармана), которое было сохранено в регулярном выражении.
Примечание
Параметры
regex_rewriteиprefix_rewrite— взаимоисключающие: вы можете использовать только один из них. -
Более подробную информацию о параметрах используемых ресурсов в 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-роутера> -
Чтобы модифицировать параметры HTTP-запроса в маршруте виртуального хоста, при создании или изменении маршрута для HTTP-трафика задайте необходимые настройки замены в поле regexRewrite (для REST API) или regex_rewrite (для gRPC API).
Примечание
Поля regexRewrite и prefixRewrite — взаимоисключающие: вы можете задать значение только для одного из них.
Удалить маршрут
Чтобы удалить маршрут из виртуального хоста 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-роутера>Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с HTTP-роутерами и виртуальными хостами Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию HTTP-роутера и виртуального хоста блоки
timeouts(ресурсыyandex_alb_http_routerиyandex_alb_virtual_hostсоответственно).Пример:
resource "yandex_alb_http_router" "<имя_роутера>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } } -
Воспользуйтесь методом REST API removeRoute для ресурса VirtualHost или вызовом gRPC API VirtualHostService/RemoveRoute.