Перейти к основному содержимому
Ограничить доступ к балансировщику нагрузки
Последнее изменение:

Ограничить доступ к балансировщику нагрузки

Вы можете ограничить доступ к балансировщику нагрузки — указать IP-адреса, с которых разрешено принимать трафик.

Разрешенные IP-адреса указываются в правиле балансировщика и применяются только на порт и тип трафика, которые указаны в правиле.

Для работы разрешенных адресов в сети балансировщика должна быть включена фильтрация трафика (port security). Если вы включите фильтрацию трафика в сети существующего балансировщика, это может вызвать сбои в его работе, поэтому мы рекомендуем создать новую сеть с фильтрацией, создать в ней балансировщик и настроить балансировку.

  1. Создайте приватную сеть.
  2. Добавьте подсеть в приватную сеть.
  3. Добавьте серверы в подсеть.
  4. Создайте балансировщик нагрузки.
  5. Создайте правило с ограничением доступа.
  6. Создайте целевую группу.
  7. Если при добавлении серверов в подсеть вы указали не группу безопасности по умолчанию, настройте группу безопасности на серверах.

1. Создать приватную сеть

  1. Откройте OpenStack CLI.

  2. Создайте приватную сеть с включенной фильтрацией трафика:

    openstack network create --enable-port-security <network_name> 

    Укажите <network_name> — имя приватной сети.

2. Добавить подсеть в приватную сеть

  1. Откройте OpenStack CLI.

  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. Добавить серверы в подсеть

  1. Откройте OpenStack CLI.

  2. Создайте порт в подсети:

    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> — имя порта.
  3. Добавьте порт к облачному серверу:

    openstack server add port <server> <port>

    Укажите:

    • <server> — ID или имя облачного сервера, можно посмотреть с помощью команды openstack server list;
    • <port> — ID или имя порта, можно посмотреть с помощью команды openstack port list.
  4. Если трафик нужно балансировать на несколько серверов, повторите шаги 2-3 для каждого сервера.

4. Создать балансировщик нагрузки

  1. Откройте OpenStack CLI.

  2. Установите компонент Octavia для работы с облачными балансировщиками нагрузки — для совместимости с версией релиза Yoga требуется версия 3.4.0:

    pip3 install python-octaviaclient===3.4.0
  3. Создайте балансировщик нагрузки:

    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> — имя балансировщика.
  4. Проверьте, что балансировщик находится в статусах ONLINE (параметр operating_status в выводе команды) и ACTIVE (provisioning_status):

    openstack loadbalancer show <loadbalancer>

    Укажите <loadbalancer> — ID или имя балансировщика, список можно посмотреть с помощью команды openstack loadbalancer list.

  5. Опционально: подключите публичный 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. Создать правило с ограничением доступа

  1. Откройте OpenStack CLI.

  2. Создайте правило с ограничением доступа:

    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.

6. Создать целевую группу

  1. Откройте OpenStack CLI.

  2. Создайте целевую группу:

    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> — название протокола.
  3. Добавьте сервер в целевую группу:

    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.
  4. Опционально: создайте проверку доступности:

    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. Настроить группу безопасности на серверах

Если при добавлении серверов в подсеть вы указали не группу безопасности по умолчанию, настройте группу — добавьте в нее правила, которые разрешают трафик от балансировщика. Чтобы проверить, какая группа назначена на порты, и посмотреть список правил в группе, используйте инструкцию Посмотреть группы безопасности на портах.

Для настройки группы безопасности используйте инструкцию Пример настройки группы безопасности для серверов в приватной сети за балансировщиком нагрузки.