您可以使用 Private Network Load Balancing 将 Cloudflare One Client 流量分配到通过 Cloudflare Tunnel 连接的私有主机名和 IP。
例如,假设您在两个数据中心运行内部应用,您希望 Cloudflare One Client 用户从最接近其地理位置的数据中心访问应用。典型负载均衡配置如下所示:
graph LR
W[WARP clients] --> C{Private load balancer <br> 100.112.0.0}
C -- Tunnel 1 --> cf1
C -- Tunnel 2 --> cf2
subgraph D2[Data center 2]
cf2@{ shape: processes, label: "cloudflared" }
subgraph F[Pool 2]
S3["Endpoint <br> 10.0.0.1 (VNET-2)"]
S4["Endpoint <br> 10.0.0.2 (VNET-2)"]
end
cf2-->S3
cf2-->S4
end
subgraph D1[Data center 1]
cf1@{ shape: processes, label: "cloudflared" }
subgraph E[Pool 1]
S1["Endpoint <br> 10.0.0.1 (VNET-1)"]
S2["Endpoint <br> 10.0.0.2 (VNET-1)"]
end
cf1-->S1
cf1-->S2
end
style E stroke-width:2px,stroke-dasharray: 5 5
style F stroke-width:2px,stroke-dasharray: 5 5
图中的组件包括:
- cloudflared:每个数据中心通过各自的 Cloudflare Tunnel 连接到 Cloudflare。
cloudflared安装在网络中的一台或多台主机上。 - 私有负载均衡器 IP:终端用户通过负载均衡器的 IP 地址连接应用。这可以是
100.112.0.0/16中的 Cloudflare 分配 IP,或 RFC 1918 范围 ↗中的自定义/32IP。 - 负载均衡器池:负载均衡器配置为每个隧道一个池。
- 负载均衡器端点:池包含一个或多个端点,每个端点是
cloudflared后面运行应用的服务器。如果服务器 IP 重叠,可以为每个隧道分配不同的虚拟网络(VNET),以便负载均衡器确定性地将请求路由到正确端点。
- 端点 IP 地址通过 Cloudflare Tunnel 路由。要了解如何连接私有网络,请参阅连接 IP/CIDR。
负载均衡器池是端点的逻辑分组,通常按物理数据中心或地理区域组织。池中的端点是流量最终路由到的目标。
池可以使用 Cloudflare 仪表板或 API 创建。
要使用仪表板创建池,请参阅创建池文档。
要获取当前虚拟网络列表,请使用 List virtual networks API 操作。
通过在 API 请求的 origins 中添加 virtual_network_id 字段启用虚拟/私有 IP 支持。有关如何使用 API 创建池的更多信息,请参阅 Cloudflare Load Balancer API 文档。
以下示例将 Cloudflare Tunnel 端点添加到现有负载均衡器池:
Required API token permissions
At least one of the following token permissions is required:Load Balancing: Monitors and Pools Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/pools/$POOL_ID" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"origins": [
{
"name": "server-1",
"address": "10.0.0.1",
"enabled": true,
"weight": 1,
"virtual_network_id": "a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
}
]
}'-
在 Cloudflare 仪表板中,前往 Load Balancing(负载均衡) 页面。
Go to Load Balancing ↗ -
选择 Create a Load Balancer(创建负载均衡器)。
-
选择 Private Load Balancer(私有负载均衡器)。
-
在下一步,您可以选择将此负载均衡器关联到:
100.112.0.0/16范围内的 Cloudflare 分配 IP- RFC 1918 范围 ↗中的自定义
/32IP
-
添加描述性名称以标识负载均衡器。
-
继续完成设置。
完成设置后,您将被重定向到负载均衡仪表板。您可以使用搜索栏或筛选 Private(私有) 负载均衡器来定位负载均衡器。请务必记下负载均衡器 IP,后续步骤需要它。
为使 Cloudflare One Client 连接到负载均衡器,负载均衡器的 IP 地址必须在 Split Tunnel 设置中通过 WARP 隧道路由。
- 在 Cloudflare 仪表板 ↗中,前往 Zero Trust > Team & Resources(团队与资源) > Device profiles(设备配置文件)。
- 找到要修改的设备配置文件并选择 Edit(编辑)。
- 在 Split Tunnels 下,检查 Split Tunnels 模式是设置为 Exclude(排除) 还是 Include(包含)。
- 选择 Manage(管理)。根据模式:
-
Exclude(排除)模式:删除包含负载均衡器 IP 的 IP 范围。例如,如果负载均衡器有 Cloudflare 分配的 CGNAT IP,删除
100.64.0.0/10。我们建议添加回负载均衡器未使用的 IP。 -
Include(包含)模式:添加负载均衡器 IP。
-
Cloudflare One Client 流量现在可以到达私有负载均衡器。例如,如果负载均衡器指向 Web 应用,您可以从设备运行 curl <load-balancer-IP> 进行测试。此流量将根据配置的导向方法通过 Cloudflare Tunnel 分配到私有端点。
如果您希望用户通过主机名透明访问负载均衡器及其端点,可以创建 Gateway DNS 覆盖策略,将主机名映射到负载均衡器的 IP 地址。这确保发往主机名的流量解析到正确的 IP。
-
在 Cloudflare 仪表板 ↗中,前往 Zero Trust > Traffic policies(流量策略) > Firewall policies(防火墙策略) > DNS。
-
选择 Add a policy(添加策略)。
-
在 Traffic(流量) 中,创建表达式,其中 Selector(选择器) 等于
Host,Operator(运算符) 等于is,Value(值) 是您希望与负载均衡器关联的主机名。例如,Selector(选择器) Operator(运算符) Value(值) Host(主机) is app.internal.local -
将 Action(操作) 设置为 Override。
-
在 Override Hostname(覆盖主机名) 中,输入私有负载均衡器 IP(例如
100.112.0.0)。
对主机名的请求现在将解析到您的私有负载均衡器。