INTEGRITY Документация

Подключите Workers к Cloudflare Mesh

В этом примере показано, как использовать привязку VPC Network с Cloudflare Mesh (ранее WARP Connector) для подключения к любому приватному сервису в вашем аккаунте из Worker: без предварительной регистрации отдельных хостов и указания UUID туннеля Cloudflare Tunnel.

При привязке к Cloudflare Mesh с помощью network_id: "cf1:network", ваш Worker может обращаться к любому узлу Mesh, клиентскому устройству, подсети или маршруту по имени хоста, объявленному через Cloudflare Tunnel или Cloudflare Mesh, а также к назначению, подключённому через Cloudflare WAN через точку входа (GRE, IPsec или CNI).

Предварительные требования

1. Настройте Worker

Привяжите Worker к Cloudflare Mesh с помощью network_id: "cf1:network" в конфигурации Wrangler:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "mesh-gateway",
	"main": "src/index.js",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"vpc_networks": [
		{
			"binding": "MESH",
			"network_id": "cf1:network",
			"remote": true
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "mesh-gateway"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-28"

[[vpc_networks]]
binding = "MESH"
network_id = "cf1:network"
remote = true

Благодаря этой единственной привязке ваш Worker может обращаться к любой службе во всех Cloudflare Tunnels, узлах Mesh и точках входа Cloudflare WAN в вашем аккаунте.

2. Реализуйте Worker

Используйте привязку VPC Network для доступа к сервисам по приватному IP-адресу. В настоящее время Cloudflare Mesh поддерживает только маршрутизацию на основе IP-адресов.

index.js
// You can target a Mesh node directly by its Mesh IP or any private IP
// on a subnet route behind the node
const SERVICE_IP = "10.0.1.50";
const SERVICE_PORT = 8080;

export default {
	async fetch(request, env, ctx) {
		try {
			const response = await env.MESH.fetch(
				`http://${SERVICE_IP}:${SERVICE_PORT}/api/data`,
			);
			return response;
		} catch (error) {
			// fetch() throws if the VPC Network cannot connect to the target
			return new Response("Service unavailable", { status: 503 });
		}
	},
};

В отличие от Службы VPC, URL, который вы передаёте в fetch() или адрес, который вы передаёте в connect() определяет фактический адрес назначения. Вы можете обращаться к любому IP-адресу и порту, доступным через вашу сеть Mesh, без создания отдельных привязок для каждого сервиса.

TCP-соединения

Также можно использовать connect() чтобы открывать необработанные TCP сокеты к службам, не использующим HTTP, через ту же привязку:

index.js
// You can target a Mesh node directly by its Mesh IP or any private IP
// on a subnet route behind the node
const REDIS_IP = "10.0.1.50";
const REDIS_PORT = 6379;

export default {
	async fetch(request, env, ctx) {
		try {
			const socket = await env.MESH.connect(`${REDIS_IP}:${REDIS_PORT}`);

			const writer = socket.writable.getWriter();
			await writer.write(new TextEncoder().encode("PING\r\n"));
			await writer.close();

			return new Response(socket.readable);
		} catch (error) {
			// connect() throws if the VPC Network cannot connect to the target
			return new Response("Service unavailable", { status: 503 });
		}
	},
};

3. Разверните и протестируйте

Разверните Worker и убедитесь, что он может обращаться к вашим приватным сервисам:

npx wrangler deploy
# Test accessing the internal user API
curl https://mesh-gateway.workers.dev/api/users

# Test accessing metrics by private IP
curl https://mesh-gateway.workers.dev/api/metrics

Следующие шаги