← Cloudflare Workers VPC / workers-vpc / configuration
Сети VPC
VPC Networks позволяют вашим Workers обращаться к любому сервису в вашей приватной сети без предварительной регистрации отдельных хостов или портов. Вы можете привязаться к определённому Cloudflare Tunnel для доступа к любому сервису за этим туннелем, либо для привязки к Cloudflare Mesh для доступа к любому узлу Mesh, клиентскому устройству, маршруту подсети или маршруту хоста, объявленному через Cloudflare Tunnel или Mesh, либо к адресу назначения, доступному через Cloudflare WAN через точку входа (GRE, IPsec или CNI).
Во время выполнения URL, который вы передаёте в fetch() или адрес, который вы передаёте в connect() определяет адрес назначения: любое имя хоста или IP-адрес, доступные через привязанный туннель Cloudflare Tunnel или через Cloudflare Mesh. Используйте fetch() для HTTP-трафика, а также connect() для необработанных TCP-соединений (Redis, MQTT, пользовательские протоколы и другие сервисы, не использующие HTTP). Это отличается от Службы VPC, для которых требуется создавать отдельную привязку для каждой комбинации хоста и порта назначения.
Привязка к Cloudflare Tunnel
Обратитесь к конкретному Cloudflare Tunnel напрямую по его UUID:
{
"vpc_networks": [
{
"binding": "MY_VPC",
"tunnel_id": "550e8400-e29b-41d4-a716-446655440000",
"remote": true
}
]
}[[vpc_networks]]
binding = "MY_VPC"
tunnel_id = "550e8400-e29b-41d4-a716-446655440000"
remote = true remote флаг должен быть установлен в значение true чтобы включить удалённые привязки при локальной разработке.
Привязка к Cloudflare Mesh
Cloudflare Mesh (ранее WARP Connector) соединяет ваши сервисы, устройства и Workers через глобальную сеть Cloudflare. Если вы привязываете Worker к Cloudflare Mesh с помощью network_id: "cf1:network", ваш Worker может обращаться к:
- Любой узел Mesh или клиентское устройство в вашем аккаунте
- Маршруты подсетей и маршруты по хостам, анонсируемые через Cloudflare Tunnel или Cloudflare Mesh
- Назначения, доступные через Cloudflare WAN точки входа (GRE, IPsec и CNI)
- Адреса назначения в публичном интернете через Cloudflare Gateway : с применением существующих политик трафика Zero Trust и записью трафика в журналы DNS, HTTP и Network
И всё это без указания конкретного UUID Cloudflare Tunnel.
Используйте cf1:network когда:
- Вашим Workers нужно обращаться к приватным службам через несколько Cloudflare Tunnels, узлов Mesh или точек входа Cloudflare WAN
- Вам нужен доступ ко всей приватной сети из Worker без управления отдельными привязками Cloudflare Tunnel
- Топология вашей приватной сети может меняться (новые соединения, новые узлы, новые маршруты), а вы не хотите каждый раз обновлять конфигурацию Worker
- Вам нужно, чтобы исходящий трафик Worker к публичным адресам проходил через Cloudflare Gateway для применения политик и обеспечения видимости
Привязка к Cloudflare Mesh с помощью network_id: "cf1:network":
{
"vpc_networks": [
{
"binding": "MY_VPC",
"network_id": "cf1:network",
"remote": true
}
]
}[[vpc_networks]]
binding = "MY_VPC"
network_id = "cf1:network"
remote = trueИспользование во время выполнения
HTTP через fetch()
Обращайтесь к любому HTTP-сервису в вашей сети во время выполнения с помощью fetch():
export default {
async fetch(request: Request, env: Env) {
// Access a service by private IP
const response = await env.MY_VPC.fetch("http://10.0.1.50/data");
// Access another service on a different port
const dbResponse = await env.MY_VPC.fetch("http://10.0.5.42:5432");
return response;
},
};Если VPC Network не может установить соединение с целевой службой, fetch() выбрасывает исключение.
TCP через connect()
Открывайте прямые TCP-соединения с любым частным адресом назначения с помощью connect(). Это полезно для протоколов, отличных от HTTP, таких как Redis, Memcached, MQTT или пользовательские бинарные протоколы:
export default {
async fetch(request: Request, env: Env) {
// Open a TCP connection to a private Redis instance
const socket = await env.MY_VPC.connect("10.0.1.50:6379");
// Write a Redis PING command
const writer = socket.writable.getWriter();
await writer.write(new TextEncoder().encode("PING\r\n"));
await writer.close();
return new Response(socket.readable);
},
};Если VPC Network не может установить TCP-соединение, connect() выбрасывает исключение.
VPC Networks и VPC Services: сравнение
VPC Networks и Службы VPC оба варианта подключают Workers к приватной инфраструктуре, но предполагают разные компромиссы.
- Использование VPC Services когда у вас есть известный набор целей и вы хотите, чтобы каждая привязка была ограничена определённым хостом и портом.
- Использование VPC Networks когда вам нужен более широкий доступ (ко всему Cloudflare Tunnel или всему Cloudflare Mesh) и вы хотите, чтобы URL-адрес был в вашем
fetch()вызов для управления маршрутизацией во время выполнения.
В следующей таблице приведены различия:
| Возможность | Сети VPC | Службы VPC |
|---|---|---|
| Область действия | Один Cloudflare Tunnel либо маршруты Cloudflare Mesh и Cloudflare WAN | Конкретный хост + порт |
| Конфигурация | tunnel_id (один туннель Cloudflare Tunnel) или cf1:network (в масштабах всего аккаунта) |
service_id |
| Протоколы | HTTP (fetch()) и TCP (connect()) |
HTTP (fetch()) или TCP (через Hyperdrive) |
| Регистрация сервиса | Не требуется | Обязательно для каждой цели |
| Когда использовать | Динамическое обнаружение, доступ в масштабе сети, обращение к сервисам в рамках вашего аккаунта | Фиксированные, каталогизированные сервисы |
Следующие шаги
- Настройка Cloudflare Tunnel
- Настройте Cloudflare Mesh
- Настройте Cloudflare WAN
- Попробуйте Подключите Workers к Cloudflare Mesh пример
- Подробнее о Workers Binding API