Ограничить доступ к балансировщику нагрузки
Вы можете ограничить доступ к балансировщику нагрузки — указать IP-адреса, с которых разрешено принимать трафик.
Разрешенные IP-адреса указываются в правиле балансировщика и применяются только на порт и тип трафика, которые указаны в правиле.
Для работы разрешенных адресов в сети балансировщика должна быть включена фильтрация трафика (port security). Если вы включите фильтрацию трафика в сети существующего балансировщика, это может вызвать сбои в его работе, поэтому мы рекомендуем создать новую сеть с фильтрацией, создать в ней балансировщик и настроить балансировку.
- Создайте приватную сеть.
- Добавьте подсеть в приватную сеть.
- Добавьте серверы в подсеть.
- Создайте балансировщик нагрузки.
- Создайте правило с ограничением доступа.
- Создайте целевую группу.
- Если при добавлении серверов в подсеть вы указали не группу безопасности по умолчанию, настройте группу безопасности на серверах.
1. Создать приватную сеть
-
Создайте приватную сеть с включенной фильтра цией трафика:
openstack network create --enable-port-security <network_name>
Укажите
<network_name>
— имя приватной сети.
2. Добавить подсеть в приватную сеть
-
Создайте подсеть в приватной сети:
openstack subnet create \
--subnet-range <cidr> \
[--dhcp | --no-dhcp] \
--gateway <gateway> \
--network <network> \
<subnet_name>Укажите:
<cidr>
— CIDR приватной подсети, например192.168.0.0/24
;- опцию DHCP:
--dhcp
— включить DHCP;--no-dhcp
— отключить DHCP;
<gateway>
— IP-адрес шлюза по умолчанию, например192.168.0.2
;<network>
— ID или имя приватной сети, которую создали ранее, можно посмотреть с помощью командыopenstack network list
;<subnet_name>
— имя приватной подсети.
3. Добавить серверы в подсеть
-
Создайте порт в подсети:
openstack port create \
--network <network> \
--fixed-ip subnet=<subnet>,ip-address=<port_ip_address> \
--security-group <security_group> \
<port_name>Укажите:
<network>
— ID или имя приватной сети, которую вы создали ранее, можно посмотреть с помощью командыopenstack network list
;<subnet>
— ID или имя подсети, кото рую вы добавили в сеть ранее, можно посмотреть с помощью командыopenstack subnet list
;<port_ip_address>
— IP-адрес порта;<security_group>
— ID или имя группы безопасности, можно посмотреть с помощью командыopenstack security group list
. Если не указать группу безопасности, будет назначена группа безопасности по умолчанию;<port_name>
— имя порта.
-
Добавьте порт к облачному серверу:
openstack server add port <server> <port>
Укажите:
<server>
— ID или имя облачного сервера, можно посмотреть с помощью командыopenstack server list
;<port>
— ID или имя порта, можно посмотреть с помощью командыopenstack port list
.
-
Если трафик нужно балансировать на несколько серверов, повторите шаги 2-3 для каждого сервера.
4. Создать балансировщик нагрузки
-
Установите компонент Octavia для работы с облачными балансировщиками нагрузки — для совместимости с версией релиза Yoga требуется версия 3.4.0:
pip3 install python-octaviaclient===3.4.0
-
Создайте балансировщик нагрузки:
openstack loadbalancer create \
--vip-subnet-id <subnet_uuid> \
--vip-address <loadbalancer_ip_address> \
--flavor <flavor> \
--name <loadbalancer_name>Укажите:
<subnet_uuid>
— ID приватной подсети, можно посмотреть с помощью командыopenstack subnet list
;<loadbalancer_ip_address>
— IP-адрес, который выделится для балансировщика нагрузки — один из свободных в подсети;<flavor>
— ID или имя флейвора. Флейворы соответствуют типам балансировщика нагрузки и определяют количество vCPU, RAM и количество инстансов балансировщика. Например,ac18763b-1fc5-457d-9fa7-b0d339ffb336
— ID для создания балансировщика с типом Продвинутый с резервированием в пуле ru-9. Список флейворов можно посмотреть с помощью командыopenstack loadbalancer flavor list -c id -c name
или в таблице Список флейворов балансировщика нагрузки во всех пулах;<loadbalancer_name>
— имя балансировщика.
-
Проверьте, что балансировщик находится в статусах
ONLINE
(параметрoperating_status
в выводе команды) иACTIVE
(provisioning_status
):openstack loadbalancer show <loadbalancer>
Укажите
<loadbalancer>
— ID или имя балансировщика, список можно посмотреть с помощью командыopenstack loadbalancer list
. -
Опционально: подключите публичный IP-адрес к балансировщику:
openstack floating ip set --port <loadbalancer_port_uuid> <floating_ip>
Укажите:
<loadbalancer_port_uuid>
— ID порта балансировщика, можно посмотреть с помощью командыopenstack loadbalancer show <loadbalancer>
, параметрvip_port_id
;<floating_ip>
— публичный IP-адрес.
5. Создать правило с ограничением доступа
Для TCP- или UDP-трафика
Для HTTP- или HTTPS-трафика
-
Создайте правило с ограничением доступа:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol <protocol> \
--protocol-port <port> \
--allowed-cidr <allowed-cidr> \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<protocol>
— название протокола:TCP
илиUDP
;<port>
— номер порта;<allowed-cidr>
— подсеть в формате CIDR, с которой разрешено принимать трафик. Если нужно указать несколько подсетей, каждую укажите в отдельном параметре--allowed-cidr
;<loadbalancer>
— ID или имя балансировщика нагрузки. Список можно посмотреть с помощью командыopenstack loadbalancer list
.
-
Создайте правило с ограничением доступа:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol <protocol> \
--protocol-port <port> \
--allowed-cidr <allowed-cidr> \
--default-tls-container=<certificate_uuid> \
--default-pool <default_pool> \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<protocol>
— название протокола:HTTP
илиTERMINATED\_HTTPS
;<port>
— номер порта;--default-tls-container=<certificate_uuid>
— ID TLS(SSL)-сертификата для терминации HTTPS-трафика на балансировщике. Укажите, если выбрали протоколTERMINATED_HTTPS
. Можно скопировать в панели управления: в разделе Облачная платформа → Менеджер секретов → вкладка Сертификаты → в меню сертификата выберите Ск опировать UUID. Подробнее о TLS(SSL)-сертификатах балансировщика нагрузки;- опционально:
--default-pool <default_pool>
— ID или имя целевой группы по умолчанию, куда будет направляться трафик, не попавший под HTTP-политики в правиле. Если не указать параметр, не попавший под политики трафик будет отбрасываться. Список групп можно посмотреть с помощью командыopenstack loadbalancer pool list
. Если у вас нет подходящей целевой группы, создайте ее; <loadbalancer>
— ID или имя балансировщика нагрузки. Список можно посмотреть с помощью командыopenstack loadbalancer list
.
-
Опционально: создайте HTTP-политику в правиле. Политику можно будет создать в любое время после создания правила.
6. Создать целевую группу
-
Создайте целевую группу:
openstack loadbalancer pool create \
--name <pool_name> \
--lb-algorithm <algorithm> \
--listener <listener_name> \
--protocol <protocol>Укажите:
<pool_name>
— имя целевой группы;<algorithm>
— название алгоритма:ROUND_ROBIN
илиLEAST_CONNECTIONS
;<listener_name>
— имя правила, можно посмотреть с помощью командыopenstack loadbalancer listener list
;<protocol>
— название протокола.
-
Добавьте сервер в целевую группу:
openstack loadbalancer member create \
--subnet-id <subnet_uuid> \
--address <server_ip_address> \
--protocol-port <port> \
<pool_name>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети сервера. Список можно посмотреть с помощью командыopenstack subnet list
;<server_ip_address>
— IP-адрес сервера из указанной подсети;<port>
— номер порта;<pool_name>
— имя целевой группы, которую создали на шаге 2.
-
Опционально: создайте проверку доступности:
openstack loadbalancer healthmonitor create \
--delay <delay> \
--timeout <timeout> \
--max-retries <max_retries> \
--max-retries-down <max_retries_down> \
--type <type> \
--http-method <http_method> \
--url-path <url_path> \
--expected-codes <codes> \
<pool_name>Укажите:
-
<delay>
— интервал между проверками в секундах; -
<timeout>
— время ожидания ответа в секундах; -
<max_retries>
— количество успешных обращений подряд, после которых сервер переводится в рабочее состояние; -
<max_retries_down>
— количество неуспешных обращений подряд, после которых работа сервера приостанавливается; -
<type>
— тип проверки:HTTP
,PING
,TCP
,TLS_HELLO
,UDP_CONNECT
; -
параметры HTTP-запроса, если выбрали тип проверки —
HTTP
:--http-method <http_method>
— метод проверки:GET
,POST
,DELETE
,PUT
,HEAD
,OPTIONS
,PATCH
,CONNECT
,TRACE
;--url-path <url_path>
— путь запроса без доменного имени;--expected-codes <codes>
— ожидаемые коды ответа через запятую;
-
<pool_name>
— имя целевой группы, которое вы задали на шаге 2.
-
7. Настроить группу безопасности на серверах
Если при добавлении серверов в подсеть вы указали не группу безопасности по умо лчанию, настройте группу — добавьте в нее правила, которые разрешают трафик от балансировщика. Чтобы проверить, какая группа назначена на порты, и посмотреть список правил в группе, используйте инструкцию Посмотреть группы безопасности на портах.
Для настройки группы безопасности используйте инструкцию Пример настройки группы безопасности для серверов в приватной сети за балансировщиком нагрузки.