Привязка нескольких Floating IP-адресов к одной ВМ
По умолчанию при создании ВМ ей назначается один внутренний IP-адрес. К нему можно привязать один Floating IP-адрес. Чтобы привязать несколько Floating IP-адресов к одной ВМ, нужно создать дополнительные порты в подсети, подключить их к ВМ и привязать к каждому порту свой Floating IP-адрес.
- Убедитесь, что клиент OpenStack установлен, и пройдите аутентификацию в проекте.
- Выберите или создайте виртуальную машину в вашем проекте VK Cloud.
- Подключите виртуальную машину к сети. Запишите идентификаторы сети и подсети.
- Добавьте в проект нужное количество Floating IP-адресов.
-
Для каждого дополнительного Floating IP-адреса добавьте порт в подсеть виртуальной машины.
-
Убедитесь, что порты созданы:
openstack port list --network <ИМЯ_ИЛИ_ID_СЕТИ>
-
Присоедините созданные порты к ВМ:
openstack server add port <ID_ВМ> <ID_ПОРТА> -
Убедитесь, что порты успешно подключены к ВМ:
openstack port list --server <ID_ВМ>
-
Привяжите каждый свободный Floating IP-адрес к соответствующему порту ВМ.
-
Убедитесь, что Floating IP-адреса успешно привязаны к портам:
openstack floating ip list
После добавления портов на ВМ появятся дополнительные сетевые интерфейсы.
Для каждого нового порта проверьте и настройте сетевой интерфейс внутри операционной системы ВМ.
По умолчанию все исходящие пакеты отправляются через основной интерфейс ВМ. Из-за этого ответы на запросы, пришедшие через дополнительные интерфейсы, уходят через основной интерфейс, и привязанные к ним Floating IP-адреса не работают.
Чтобы каждый интерфейс использовал свой маршрут, настройте правила маршрутизации (policy routing). Для каждого интерфейса создайте таблицу маршрутизации и правило, которое направляет пакеты с IP-адреса этого интерфейса через его шлюз.
Далее приведены примеры для интерфейса eth1 с внутренним IP-адресом 10.0.1.97/24 и шлюзом 10.0.1.1.
-
Добавьте в файл
/etc/netplan/50-cloud-init.yamlдля каждого дополнительного интерфейса параметрыroutesиrouting-policy.Пример:
network:version: 2ethernets:eth0:dhcp4: trueeth1:dhcp4: trueroutes:- to: 0.0.0.0/0via: 10.0.1.1table: 101routing-policy:- from: 10.0.1.97/32table: 101Для каждого следующего интерфейса используйте следующий номер таблицы (102, 103 и т. д.) и укажите соответствующие IP-адрес и шлюз.
-
Примените настройки:
sudo netplan apply
-
Убедитесь, что каждый Floating IP-адрес доступен извне. Выполните проверку с вашего компьютера:
ping <FLOATING_IP_1>ping <FLOATING_IP_2> -
Убедитесь, что каждый интерфейс имеет внутренний IP-адрес из подсети:
LinuxWindowsip addr show -
Проверьте связность между Floating IP-адресом и внутренним IP-адресом:
LinuxWindowscurl --interface <ИМЯ_ИНТЕРФЕЙСА> ifconfig.meКоманда вернет Floating IP-адрес, привязанный к этому интерфейсу.
-
Убедитесь, что правила маршрутизации применены:
LinuxWindowsip rule listip route show table <НОМЕР_ТАБЛИЦЫ>