本指南说明如何在使用 Cloudflare Load Balancing 时实现 DNS 持久性,类似于传统基于 DNS 的负载均衡器提供的功能。
DNS 持久性确保来自同一本地 DNS 服务器的后续 DNS 请求收到相同的 IP 地址。这对于需要会话一致性的应用(如 VPN 连接或身份验证系统)非常有用。
Cloudflare Load Balancing 可以使用不同的配置方法为仅 DNS 的负载均衡实现 DNS 持久性。
对于仅 DNS 的负载均衡,Cloudflare 提供三种实现 DNS 持久性的方法:
此方法使用接收 DNS 请求的 Cloudflare Point of Presence (PoP) 的地理位置进行地理导向。
- 为每个端点创建一个池。不要对任一池应用负载卸载。
- 创建仅 DNS 的负载均衡器并添加两个池。确保
pool_1排在pool_2之前。 - 在 Traffic Steering(流量导向) 下,选择 Geo Steering(地理导向)。
- 为一个区域(例如 Eastern North America(北美东部))创建地理导向规则,选择相同的池但顺序相反(
pool_2在前,然后pool_1)。 - 使用 Never prefer ECS(从不优先使用 ECS) 和 PoP location(PoP 位置) 来确定请求来源。
指定区域 Cloudflare PoP 收到的所有请求都发送到一个端点,而其他区域的请求发送到另一个端点。
使用接收请求的 Cloudflare PoP 作为导向标准比 IP 哈希或分割 IP 空间更稳定,因为它不受递归 DNS 提供商使用不同出口 IP 的影响。
此方法使用负载卸载基于递归 DNS 解析器的源 IP 地址分配流量。
- 为每个端点创建一个池(例如
pool_1含endpoint_1,pool_2含endpoint_2)。 - 在第一个池上,在 Endpoint Steering(端点导向) 下选择 Hash(哈希)。
- 配置 Load Shedding(负载卸载):
- Policy(策略):IP Hash
- Shed %(卸载百分比):50%(在两个池之间平均分配流量)
- 创建仅 DNS 的负载均衡器并添加两个池。确保
pool_1排在pool_2之前。 - 不要配置额外的流量导向或规则。
此配置使用 IP 哈希将一半请求卸载到第二个池,并按递归解析器的源 IP 尊重会话亲和性。
某些递归 DNS 提供商(如 Google DNS 8.8.8.8 或 Quad9 9.9.9.9)可能随机使用不同的出口 IP,这会降低持久性稳定性。
此方法使用自定义规则基于 IP 地址范围分割流量。
- 为每个端点创建一个池。不要对任一池应用负载卸载。
- 创建仅 DNS 的负载均衡器并添加两个池。确保
pool_1排在pool_2之前。 - 不要配置流量导向。
- 创建 Custom Rule(自定义规则):
- Field(字段):IP Source Address
- Operator(运算符):is in
- Value(值):IP 空间的子集(例如
0.0.0.0/1表示 IPv4 空间的下半部分)
- 对于规则操作,选择 Override(覆盖) > Endpoints(端点) 并将池按相反顺序设置(
pool_2、pool_1)。
源 IP 在 IPv4 空间下半部分的流量发送到一个端点,上半部分的流量发送到另一个端点。
与方法 2 类似,此方法在使用不同出口 IP 的递归 DNS 提供商处可能不太稳定。