Azure 负载均衡器浮动 IP 配置

负载均衡器针对 UDP 和 TCP 应用程序提供了多种功能。

浮动 IP

某些应用程序方案更喜欢或要求后端池中单个 VM 上的多个应用程序实例使用相同端口。 重复使用端口的常见示例包括提供高可用性群集、网络虚拟设备,以及公开多个不重新加密的 TLS 终结点。 如果你想要在多个规则中重复使用后端端口,必须在规则定义中启用浮动 IP。 启用浮动 IP 可以提高灵活性。

浮动 IP 状态 结果
已启用浮动 IP Azure 将 IP 地址映射更改为负载均衡器的前端 IP 地址
已禁用浮动 IP Azure 公开 VM 实例的 IP 地址

在关系图中,你可以了解启用浮动 IP 之前和之后 IP 地址映射的工作原理:此图显示启用浮动 IP 之前通过负载均衡器的网络流量。

此图显示启用浮动 IP 之后通过负载均衡器的网络流量。

可以通过 Azure 门户、REST API、CLI、PowerShell 或其他客户端在负载均衡器规则上配置浮动 IP。 除了进行规则配置外,还必须配置虚拟机的来宾 OS 才能使用浮动 IP。

使用浮动 IP 的多个前端 IP 的负载均衡器流量示意图。

此方案中,后端池中的每个 VM 有三个网络接口:

  • 后端 IP:与 VM 关联的虚拟 NIC(Azure NIC 资源的 IP 配置)。
  • 前端 1 (FIP1):来宾 OS 中的环回接口,该接口上已配置 FIP1 的 IP 地址。
  • 前端 2 (FIP2):来宾 OS 中的环回接口,该接口上已配置 FIP2 的 IP 地址。

假设上述方案使用相同的前端配置:

前端 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) 相同

入站流的目标现在是 VM 中环回接口上的前端 IP 地址。 每个规则必须生成具有目标 IP 地址和目标端口唯一组合的流量。 可以通过将目标 IP 地址更改为流的前端 IP 地址,在同一 VM 上重复使用端口。 通过将服务绑定到前端的 IP 地址和相应环回接口的端口,可以向负载均衡器公开服务。

你注意到,示例中的目标端口并未更改。 在浮动 IP 方案中,Azure 负载均衡器还支持定义负载均衡规则来更改后端目标端口,使其与前端目标端口不同。

浮动 IP 规则类型是多种负载均衡器配置模式的基础。 当前可用的一个示例是以下配置:配置一个或多个Always On可用性组侦听器。 今后我们会介绍更多此类方案。 有关启用浮动 IP 所需的特定来宾 OS 配置的详细信息,请参阅下一部分中的 Azure 负载均衡器浮动 IP 配置

浮动 IP 来宾 OS 配置

为了正常运行,需要将虚拟机的来宾 OS 配置为接收发往负载均衡器前端 IP 和端口的所有流量。 配置 VM 需要:

  • 添加环回网络接口
  • 使用负载均衡器的前端 IP 地址配置环回
  • 确保系统可以在未将 IP 地址分配给该环回接口的接口上发送/接收数据包。Windows 系统要求将接口设置为使用“弱主机”模型。 对于 Linux 系统,默认情况下通常会使用此模型。
  • 将主机防火墙配置为允许前端 IP 端口上的流量。

注意

以下示例全都使用 IPv4;若要使用 IPv6,请将“ipv4”替换为“ipv6”。

Windows Server

展开

对于后端池中的每个 VM,请在服务器上的 Windows 命令提示符下运行以下命令。

若要获取 VM 上的接口名称列表,请键入以下命令:

netsh interface ipv4 show interface 

对于 VM NIC(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 替换为此环回接口的名称,并将 floatingipfloatingipnetmask 替换为对应于负载均衡器前端 IP 的相应值)

最后,如果来宾主机使用防火墙,请确保设置一个规则,使流量能够通过相应的端口到达 VM。

此示例配置假设负载均衡器前端 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

展开

对于后端池中的每个 VM,请通过 SSH 会话运行以下命令。

若要获取 VM 上的接口名称列表,请键入以下命令:

ip addr

对每个环回接口重复这些命令,以将浮动 IP 分配给环回别名:

sudo ip addr add floatingip/floatingipnetmask dev lo:0

(请将 floatingipfloatingipnetmask 替换为对应于负载均衡器前端 IP 的相应值)

最后,如果来宾主机使用防火墙,请确保设置一个规则,使流量能够通过相应的端口到达 VM。

此示例配置假设负载均衡器前端 IP 配置为 1.2.3.4,并针对端口 80 设置了负载均衡规则。

sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp

限制

  • 在负载均衡规则上启用浮动 IP 后,你的应用程序必须为出站流量使用网络接口的主要 IP 配置。
  • 如果应用程序绑定到来宾 OS 中环回接口上配置的前端 IP 地址,则 Azure 的出站流量不会重写出站流,因而该流会失败。 查看出站方案

后续步骤