Балансировать трафик по URL запроса
Вы можете направлять трафик на разные целевые группы серверов в зависимости от того, какой домен и путь указаны в запросе.
Панель управления
OpenStack CLI
-
В панели управления перейдите в раздел Облачная платформа → Балансировщики.
-
Откройте вкладку Балансировщики → страница балансировщика.
-
Нажмите Создать правило.
-
Выберите протокол приема трафика — HTTPS. Будет автоматически выбран стандартный порт 443, на котором балансировщик будет слушать трафик.
-
Выберите сертификат для терминации HTTPS-трафика на балансировщике — выберите сертификат из менеджера секретов или загрузите новый. Если правило будет принимать трафик для нескольких доменов, сертификат должен действовать на все домены, либо добавьте несколько сертификатов.
-
Выберите целевую группу по умолчанию — туда будет направляться трафик, который не попал под HTTP-политики. Выберите группу из списка или создайте новую целевую группу, укажите для нее протокол назначения трафика HTTP и порт 80. Если вы хотите отбрасывать трафик, не попавший под HTTP-политику, выберите Без целевой группы.
-
Отметьте заголовки HTTP-запросов, которые будут передаваться серверам.
-
Создайте HTTP-политику, по которой будет происходить балансировка трафика. Для этого нажмите Добавить новую политику.
-
Чтобы балансировать запрос по доменному имени, выберите условие проверки: HOSTNAME — EQUAL TO.
-
Введите имя домена без протокола, например
example.com
. -
Нажмите Новое условие.
-
Чтобы балансировать запрос по пути, выберите условие проверки: PATH — STARTS WITH.
-
Введите текст, с которого должен начинаться путь запроса, например
/api
. -
Выберите действие Направить на целевую группу.
-
Выберите целевую группу, куда будет направляться трафик, попавший под политику. Чтобы создать новую целевую группу, нажмите Новая целевая группа и создайте целевую группу с протоколом HTTP и портом 80. Если вы хотите отбрасывать трафик, не попавший под HTTP-политику, выберите Без целевой группы.
-
Опционально: измените имя политики или оставьте сформированное по умолчанию.
-
Нажмите Добавить.
-
Опционально: откройте блок Расширенные настройки правила и укажите настройки соединений:
- для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
- для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Нажмите Создать.
-
Если у вас еще нет целевой группы, куда будет балансироваться трафик, создайте ее:
openstack loadbalancer pool create \
--name <pool_name> \
--lb-algorithm <algorithm> \
--loadbalancer <loadbalancer> \
--protocol HTTPУкажите:
<pool_name>
— имя целевой группы;<algorithm>
— название алгоритма:ROUND_ROBIN
илиLEAST_CONNECTIONS
<loadbalancer>
— ID или имя балансировщика нагрузки. Список можно посмотреть с помощьюopenstack loadbalancer list
-
Если на шаге 2 вы создали целевую группу, добавьте в нее сервер:
openstack loadbalancer member create \
--subnet-id <subnet_uuid> \
--address <server_ip_address> \
--protocol-port 80 \
<pool>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети сервера. Список можно посмотреть с помощью командыopenstack subnet list
;<server_ip_address>
— приватный IP-адрес сервера, можно посмотреть в панели управления в разделе Облачная платформа → Серверы → страница сервера → вкладка Порты;<pool>
— ID или имя целевой группы, которую создали на шаге 2.
-
Создайте правило для балансировщика с протоколом TERMINATED_HTTPS и портом 443:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol TERMINATED_HTTPS \
--protocol-port 443 \
--default-tls-container=<certificate_uuid> \
--default-pool <default_pool> \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<certificate_uuid>
— ID TLS(SSL)-сертификата для терминации трафика на балансировщике. Можно скопировать в панели управления: в разделе Облачная платформа → Менеджер секретов → вкладка Сертификаты → в меню сертификата выберите Скопировать UUID. Если правило будет принимать трафик для нескольких доменов, сертификат должен действовать на все домены, либо добавьте несколько сертификатов;- опционально:
--default-pool <default_pool>
— ID или имя целевой группы по умолчанию, куда будет напр авляться трафик, не попавший под HTTP-политики в правиле. Список групп можно посмотреть с помощьюopenstack loadbalancer pool list
. Если у вас нет подходящей целевой группы, создайте ее. Если не указать параметр, не попавший под политики трафик будет отбрасываться; <loadbalancer>
— ID или имя балансировщика нагрузки. Список можно посмотреть с помощьюopenstack loadbalancer list
-
Создайте HTTP-политику в правиле:
openstack loadbalancer l7policy create \
--action REDIRECT_TO_POOL \
--redirect-pool <pool> \
--name <policy_name> \
<listener_name>Укажите:
<pool>
— ID или имя целевой группы. Список можно посмотреть с помощьюopenstack loadbalancer pool list
<policy_name>
— имя L7-политики;<listener_name>
— имя правила, которое вы за дали на шаге 4.
-
Чтобы балансировать запрос по доменному имени, создайте условие в HTTP-политике для проверки домена:
openstack loadbalancer l7rule create \
--compare-type EQUAL_TO \
--type HOST_NAME \
--value <domain_name> \
<policy>Укажите:
<domain_name>
— домен видаexample.com
;<policy>
— ID или имя L7-политики. Список можно посмотреть с помощьюopenstack loadbalancer l7policy list
-
Чтобы балансировать запрос по пути, создайте условие в HTTP-политике для проверки пути:
openstack loadbalancer l7rule create \
--compare-type STARTS_WITH \
--type PATH \
--value <path> \
<policy>Укажите:
<path>
— текст, с которого должен начинаться путь запроса, например,/api
;<policy>
— ID или имя L7-политики. Список можно посмотреть с помощьюopenstack loadbalancer l7policy list