Azure 负载均衡器浮动 IP 配置
负载均衡器针对 UDP 和 TCP 应用程序提供了多种功能。
浮动 IP
某些应用程序方案更喜欢或要求后端池中单个 VM 上的多个应用程序实例使用相同端口。 重复使用端口的常见示例包括提供高可用性群集、网络虚拟设备,以及公开多个不重新加密的 TLS 终结点。 如果你想要在多个规则中重复使用后端端口,必须在规则定义中启用浮动 IP。 启用浮动 IP 可以提高灵活性。
浮动 IP 状态 | 结果 |
---|---|
已启用浮动 IP | Azure 将 IP 地址映射更改为负载均衡器的前端 IP 地址 |
已禁用浮动 IP | Azure 公开 VM 实例的 IP 地址 |
在关系图中,你可以了解启用浮动 IP 之前和之后 IP 地址映射的工作原理:
可以通过 Azure 门户、REST API、CLI、PowerShell 或其他客户端在负载均衡器规则上配置浮动 IP。 除了进行规则配置外,还必须配置虚拟机的来宾 OS 才能使用浮动 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 替换为此环回接口的名称,并将 floatingip 和 floatingipnetmask 替换为对应于负载均衡器前端 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
(请将 floatingip 和 floatingipnetmask 替换为对应于负载均衡器前端 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 的出站流量不会重写出站流,因而该流会失败。 查看出站方案。
后续步骤
- 了解如何通过 Azure 负载均衡器使用多个前端。
- 了解 Azure 负载均衡器出站连接。