Конфигурация Azure Load Balancer с плавающим IP-адресом
Load Balancer предоставляет указанные ниже возможности для приложений TCP и UDP.
Плавающий IP-адрес
Некоторые сценарии приложений предпочитают или требуют использования одного порта несколькими экземплярами приложений на одной виртуальной машине в серверном пуле. К распространенным примерам повторного использования портов относятся виртуальные сетевые устройства, кластеризация для обеспечения высокой доступности и размещение нескольких конечных точек TLS без повторного шифрования. Если вы хотите, чтобы внутренний порт повторно использовался в нескольких правилах, то в определении правила необходимо активировать плавающий IP-адрес. Включение плавающего IP-адреса обеспечивает большую гибкость.
Состояние с плавающей IP-адресой | Результат |
---|---|
Включенный плавающий IP-адрес | Azure изменяет сопоставление IP-адресов с IP-адресом внешнего интерфейса подсистемы балансировки нагрузки |
Неактивный IP-адрес с плавающей запятой | Azure предоставляет IP-адрес экземпляров виртуальных машин |
На схемах показано, как работает сопоставление IP-адресов до и после включения плавающего IP-адреса:
Вы настраиваете плавающий IP-адрес в правиле Load Balancer с помощью портал Azure, REST API, CLI, PowerShell или другого клиента. Чтобы использовать плавающий IP-адрес, кроме настройки правил необходимо также задать конфигурацию гостевой ОС виртуальной машины.
В этом сценарии каждая виртуальная машина во внутреннем пуле имеет три сетевых интерфейса:
- Внутренний IP-адрес: виртуальная сетевой адаптер, связанная с виртуальной машиной (IP-конфигурация ресурса сетевого адаптера Azure).
- Интерфейс 1 (FIP1): интерфейс обратного цикла в гостевой ОС, настроенный с IP-адресом FIP1.
- Интерфейс 2 (FIP2): интерфейс обратного цикла в гостевой ОС, настроенный с IP-адресом FIP2.
Предположим, что интерфейсная конфигурация такая же, как в предыдущем сценарии:
Внешний интерфейс | IP-адрес | protocol | port |
---|---|---|---|
1 | 65.52.0.1 | TCP | 80 |
2 | 65.52.0.2 | TCP | 80 |
Мы определяем два правила с плавающей ip-адресой:
Правило | Внешний интерфейс | Сопоставление с внутренним пулом |
---|---|---|
1 | FIP1:80 | FIP1:80 (в VM1 и VM2) |
2 | FIP2:80 | FIP2:80 (в VM1 и VM2) |
Следующая таблица демонстрирует полное сопоставление в балансировщике нагрузки:
Правило | Интерфейсный IP-адрес | protocol | port | Назначение | port |
---|---|---|---|---|---|
1 | 65.52.0.1 | TCP | 80 | такое, как у внешнего интерфейса (65.52.0.1) | такое, как у внешнего интерфейса (80) |
2 | 65.52.0.2 | TCP | 80 | такое, как у внешнего интерфейса (65.52.0.2) | такое, как у внешнего интерфейса (80) |
Назначение входящего потока теперь является интерфейсным IP-адресом интерфейса в интерфейсе обратной связи на виртуальной машине. Каждое правило должно создавать поток с уникальным сочетанием конечного IP-адреса и конечного порта. Повторное использование портов можно использовать на одной виртуальной машине, изменив целевой IP-адрес на внешний IP-адрес потока. Служба предоставляется балансировщику нагрузки через привязку к интерфейсному IP-адресу и порту соответствующего интерфейса замыкания на себя.
Вы заметили, что порт назначения не изменяется в примере. В сценариях с плавающей ip-адресой Azure Load Balancer также поддерживает определение правила балансировки нагрузки для изменения порта назначения серверной части и его отличия от порта назначения внешнего интерфейса.
Тип правил с плавающим IP-адресом лежит в основе нескольких шаблонов конфигураций балансировщика нагрузки. Одним из примеров, доступных в настоящее время, является настройка одного или нескольких прослушивателей группы доступности Always On. Со временем мы задокументируем больше этих сценариев. Дополнительные сведения о конкретных конфигурациях гостевой ОС, необходимых для включения с плавающего IP-адреса, см. в разделе "Конфигурация с плавающей запятой" в Azure Load Balancer.
Конфигурация гостевой ОС для плавающего IP-адреса
Чтобы функционировать, вы настроите гостевую ОС для виртуальной машины, чтобы получить весь трафик, привязанный к интерфейсному IP-адресу и порту подсистемы балансировки нагрузки. Для настройки виртуальной машины требуется:
- добавление сетевого интерфейса loopback
- настроить замыкание на себя с использованием интерфейсного IP-адреса подсистемы балансировки нагрузки;
- обеспечение того, что система может отправлять и получать пакеты в интерфейсах, у которых нет IP-адреса, назначенного данному интерфейсу. Для систем Windows требуются параметры интерфейсов для использования модели "слабый узел". Для систем Linux эта модель обычно используется по умолчанию.
- Настройка брандмауэра узла для разрешения трафика на интерфейсном IP-порту.
Примечание.
В приведенных ниже примерах используется протокол IPv4; для использования протокола IPv6 замените "ipv6" на "ipv4".
Windows Server
Развертывание
Для каждой виртуальной машины во внутреннем пуле выполните указанные ниже команды в командной строке Windows на сервере.
Чтобы получить список имен интерфейсов на виртуальной машине, введите следующую команду:
netsh interface ipv4 show interface
Для сетевого интерфейса виртуальной машины (под управлением Azure) введите следующую команду.
netsh interface ipv4 set interface "interfacename" weakhostreceive=enabled
(замените "interfacename" именем этого интерфейса)
Для каждого добавленного интерфейса замыкания на себя выполните следующие команды:
netsh interface ipv4 add addr floatingipaddress floatingip floatingipnetmask
netsh interface ipv4 set interface floatingipaddress weakhostreceive=enabled weakhostsend=enabled
(замените loopbackinterface именем этого интерфейса loopback и floatingip и floatingipnetmask соответствующими значениями, соответствующими интерфейсному IP-адресу подсистемы балансировки нагрузки)
Наконец, если гостевой узел использует брандмауэр, убедитесь, что правило настроено, чтобы трафик можно было связаться с виртуальной машиной на соответствующих портах.
В этом примере конфигурации предполагается, что интерфейсная IP-конфигурация подсистемы балансировки нагрузки 1.2.3.4 и правило балансировки нагрузки для порта 80:
netsh int ipv4 set int "Ethernet" weakhostreceive=enabled
netsh int ipv4 add addr "Loopback Pseudo-Interface 1" 1.2.3.4 255.255.255.0
netsh int ipv4 set int "Loopback Pseudo-Interface 1" weakhostreceive=enabled weakhostsend=enabled
netsh advfirewall firewall add rule name="http" protocol=TCP localport=80 dir=in action=allow enable=yes
Ubuntu
Развертывание
Для каждой виртуальной машины во внутреннем пуле выполните указанные следующие команды в сеансе SSH.
Чтобы получить список имен интерфейсов на виртуальной машине, введите следующую команду:
ip addr
Для каждого интерфейса замыкания на себя повторите следующие команды, которые назначают плавающий IP-адрес псевдониму замыкания на себя:
sudo ip addr add floatingip/floatingipnetmask dev lo:0
(замените floatingip и floatingipnetmask соответствующими значениями, соответствующими интерфейсному IP-адресу подсистемы балансировки нагрузки)
Наконец, если гостевой узел использует брандмауэр, убедитесь, что правило настроено, чтобы трафик можно было связаться с виртуальной машиной на соответствующих портах.
В этом примере конфигурация предполагает конфигурацию внешнего IP-адреса подсистемы балансировки нагрузки 1.2.3.4 и правило балансировки нагрузки для порта 80. В этом примере также предполагается использование брандмауэра UFW (неусложненный брандмауэр) в Ubuntu.
sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp
Ограничения
- При включении плавающего IP-адреса в правиле балансировки нагрузки приложение должно использовать основную IP-конфигурацию сетевого интерфейса для исходящего трафика.
- Если приложение привязывается к интерфейсным IP-адресам, настроенным в интерфейсе обратного цикла в гостевой ОС, исходящий трафик Azure не перезаписывает исходящий поток, а поток завершается ошибкой. Рассмотрите сценарии для исходящего трафика.
Следующие шаги
- Сведения об использовании Load Balancer с несколькими внешними интерфейсами.
- Ознакомьтесь со сведениями об исходящих подключениях Azure Load Balancer.