跳转到内容
搜索文档

使用 Client-to-Tunnel 设置私有网络负载均衡

最后更新 查看 MarkdownAgent 设置

您可以使用 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 范围中的自定义 /32 IP。
  • 负载均衡器池:负载均衡器配置为每个隧道一个
  • 负载均衡器端点:池包含一个或多个端点,每个端点是 cloudflared 后面运行应用的服务器。如果服务器 IP 重叠,可以为每个隧道分配不同的虚拟网络(VNET),以便负载均衡器确定性地将请求路由到正确端点。

前提条件

  • 端点 IP 地址通过 Cloudflare Tunnel 路由。要了解如何连接私有网络,请参阅连接 IP/CIDR

1. 创建负载均衡器池

负载均衡器池是端点的逻辑分组,通常按物理数据中心或地理区域组织。池中的端点是流量最终路由到的目标。

池可以使用 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
Patch Poolbash
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"
				}
		]
	}'

2. 创建私有负载均衡器

  1. 在 Cloudflare 仪表板中,前往 Load Balancing(负载均衡) 页面。

    Go to Load Balancing ↗
  2. 选择 Create a Load Balancer(创建负载均衡器)

  3. 选择 Private Load Balancer(私有负载均衡器)

  4. 在下一步,您可以选择将此负载均衡器关联到:

  5. 添加描述性名称以标识负载均衡器。

  6. 继续完成设置。

完成设置后,您将被重定向到负载均衡仪表板。您可以使用搜索栏或筛选 Private(私有) 负载均衡器来定位负载均衡器。请务必记下负载均衡器 IP,后续步骤需要它。

3. 通过 Cloudflare One Client 路由负载均衡器 IP

为使 Cloudflare One Client 连接到负载均衡器,负载均衡器的 IP 地址必须在 Split Tunnel 设置中通过 WARP 隧道路由。

  1. Cloudflare 仪表板中,前往 Zero Trust > Team & Resources(团队与资源) > Device profiles(设备配置文件)
  2. 找到要修改的设备配置文件并选择 Edit(编辑)
  3. Split Tunnels 下,检查 Split Tunnels 模式是设置为 Exclude(排除) 还是 Include(包含)
  4. 选择 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 分配到私有端点。

4.(可选)为负载均衡器分配主机名

如果您希望用户通过主机名透明访问负载均衡器及其端点,可以创建 Gateway DNS 覆盖策略,将主机名映射到负载均衡器的 IP 地址。这确保发往主机名的流量解析到正确的 IP。

  1. Cloudflare 仪表板中,前往 Zero Trust > Traffic policies(流量策略) > Firewall policies(防火墙策略) > DNS

  2. 选择 Add a policy(添加策略)

  3. Traffic(流量) 中,创建表达式,其中 Selector(选择器) 等于 HostOperator(运算符) 等于 isValue(值) 是您希望与负载均衡器关联的主机名。例如,

    Selector(选择器) Operator(运算符) Value(值)
    Host(主机) is app.internal.local
  4. Action(操作) 设置为 Override

  5. Override Hostname(覆盖主机名) 中,输入私有负载均衡器 IP(例如 100.112.0.0)。

对主机名的请求现在将解析到您的私有负载均衡器。

这篇文档对您有帮助吗?