← Cloudflare Workers VPC / workers-vpc / configuration
Службы VPC
VPC Services являются базовым строительным блоком Workers VPC. Они представляют собой конкретные ресурсы в вашей приватной сети, к которым Workers могут обращаться через Cloudflare Tunnel.
Вы можете использовать привязки для подключения к VPC Services из Workers. Каждый запрос к VPC Service, выполненный с помощью его fetch функция будет безопасно направлена к настроенному сервису в приватной сети.
VPC Services гарантируют, что запросы направляются только к нужному сервису, не раскрывая всю сеть, что защищает ваши рабочие нагрузки и предотвращает подделку запросов на стороне сервера (SSRF).
Участники с Connectivity Directory Bind роль позволяет привязываться к существующим VPC Services из Workers. Для создания VPC Services требуется Connectivity Directory Admin роль.
Настройка VPC Service
VPC Service включает в себя:
- Тип:
httpдля сервисов HTTP/HTTPS, илиtcpдля TCP-сервисов (например, PostgreSQL, MySQL) - Tunnel ID: Cloudflare Tunnel, обеспечивающий сетевое подключение
- Hostname или адреса IPv4/IPv6: имя хоста или адреса IPv4 и (или) IPv6, используемые для маршрутизации к вашему сервису из туннеля в вашей частной сети
- Порты: Для
httpтип, конфигурация порта HTTP и/или HTTPS (необязательно, по умолчанию 80/443). Дляtcpтип, порт TCP (обязательно). - Прикладной протокол (только TCP): при необходимости укажите
postgresqlилиmysqlдля указания протокола прикладного уровня для службы TCP - Режим проверки сертификата TLS: при необходимости настройте, как соединение с источником проверяет TLS-сертификаты
- IP-адреса резолвера: при необходимости можно указать конкретный IP-адрес резолвера, если он не указан,
cloudflaredбудет направлять DNS-трафик на текущий настроенный системный DNS-сервер по умолчанию.
HTTP-сервисы
HTTP VPC Services позволяют Workers выполнять fetch() запросы к приватным конечным точкам HTTP/HTTPS.
Запросы шифруются на всём пути следования, пока не достигнут вашей сети через туннель, независимо от схемы, указанной в URL-адресе, переданном в fetch. Если http схема используется, между туннелем и сервисом устанавливается незашифрованное соединение.
https схема может использоваться для шифрованного соединения внутри вашей сети, между туннелем и вашим сервисом. Когда https схема указана, хост, переданный в fetch() операция используется как значение Server Name Indication (SNI).
По умолчанию VPC Services разрешают оба http и https схем. Вы можете указать значение только для одного из http_port или https_port чтобы принудительно использовать определённую схему.
Если Workers VPC не может установить соединение с вашей службой, fetch() выбросит исключение.
TCP-сервисы
TCP VPC Services позволяют подключаться к TCP-сервисам, таким как базы данных PostgreSQL и MySQL. Используйте tcp тип службы с --tcp-port чтобы открыть доступ к службе TCP.
При необходимости вы можете указать --app-protocol postgresql или mysql для указания протокола прикладного уровня. Эти метаданные используются другими продуктами Cloudflare, такими как Hyperdrive, чтобы находить TCP-сервисы по поддерживаемому протоколу передачи данных.
TCP VPC Services используются с Hyperdrive для подключения Workers к приватным базам данных. См. Подключение к частной базе данных через Workers VPC для получения полного руководства.
Поддерживаемые TLS-сертификаты
При использовании https схема, туннель проверяет TLS сертификат, предоставленный вашим исходным сервисом. Workers VPC доверяет следующим типам сертификатов:
- Публично доверенные сертификаты : сертификаты, выпущенные известными публичными удостоверяющими центрами (например, Let's Encrypt, DigiCert).
- Сертификаты Cloudflare Origin CA : бесплатные сертификаты, выпущенные Cloudflare, которые шифруют трафик между Cloudflare и вашим исходным сервером. Сертификаты Origin CA не считаются доверенными в браузерах, но считаются доверенными в Workers VPC при подключении к вашим приватным сервисам.
Если исходный сервис предъявляет сертификат, выданный не публично доверенным CA и не Cloudflare Origin CA, TLS-рукопожатие завершится ошибкой и fetch() выбросит исключение.
Режим проверки сертификата TLS
Вы можете настроить, как соединение с вашей исходной службой проверяет TLS-сертификаты, задав --cert-verification-mode опция при создании или обновлении VPC Service. Это применимо как к типу службы HTTP, так и к TCP.
| Режим | Описание |
|---|---|
verify_full |
Проверять полную цепочку сертификатов и имя хоста (по умолчанию) |
verify_ca |
Проверять только цепочку сертификатов, пропуская проверку имени хоста |
disabled |
Do not verify the server certificate |
Примеры конфигурации
Эти конфигурации представляют собой ожидаемый контракт REST API для создания VPC Service, тип сервиса в общем каталоге подключений.
HTTP-сервис с IP-адресами
Ниже приведён пример HTTP VPC Service с использованием пользовательских портов HTTP и HTTPS, а также адресов IPv4 и IPv6.
{
"type": "http",
"name": "human-readable-name",
// Port configuration (optional - defaults to 80/443)
"http_port": 80,
"https_port": 443,
// Host configuration
"host": {
"ipv4": "10.0.0.1",
"ipv6": "fe80::",
"network": {
"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
},
},
}HTTP-сервис с hostname
Ниже приведён пример HTTP VPC Service с использованием имени хоста. При использовании имени хоста укажите resolver_network который опционально включает resolver_ips.
{
"type": "http",
"name": "human-readable-name",
// Port configuration (optional - defaults to 80/443)
"http_port": 80,
"https_port": 443,
// Hostname Host (with DNS resolver)
"host": {
"hostname": "example.com",
"resolver_network": {
"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
"resolver_ips": ["10.0.0.1"], // Optional
},
},
}TCP-сервис (например, PostgreSQL)
Ниже приведён пример TCP VPC Service для базы данных PostgreSQL.
{
"type": "tcp",
"name": "my-postgres-db",
"tcp_port": 5432,
"app_protocol": "postgresql", // Optional: "postgresql" or "mysql"
"host": {
"ipv4": "10.0.0.5",
"network": {
"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
},
},
}Сервис с проверкой TLS-сертификата
В следующем примере создаётся TCP-сервис с verify_ca режим проверки сертификата.
{
"type": "tcp",
"name": "my-postgres-db",
"tcp_port": 5432,
"app_protocol": "postgresql",
"host": {
"ipv4": "10.0.0.5",
"network": {
"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
},
},
"tls_settings": {
"cert_verification_mode": "verify_ca",
},
}Настройка привязки Workers
После создания VPC Service вы можете привязать его к своему Worker:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.js",
"vpc_services": [
{
"binding": "PRIVATE_API",
"service_id": "e6a0817c-79c5-40ca-9776-a1c019defe70",
"remote": true // When true, utilizes [remote bindings](/workers/local-development/#remote-bindings) to allow access to the VPC Service during local development.
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
main = "src/index.js"
[[vpc_services]]
binding = "PRIVATE_API"
service_id = "e6a0817c-79c5-40ca-9776-a1c019defe70"
remote = trueУ вас может быть несколько привязок VPC service:
{
"vpc_services": [
{
"binding": "PRIVATE_API",
"service_id": "daf43e8c-a81a-4242-9912-4a2ebe4fdd79",
"remote": true
},
{
"binding": "PRIVATE_DATABASE",
"service_id": "453b6067-1327-420d-89b3-2b6ad16e6551",
"remote": true
},
{
"binding": "INTERNAL_CACHE",
"service_id": "6c39b574-237e-49f4-852a-cea5a93ed8f9",
"remote": true
}
]
}[[vpc_services]]
binding = "PRIVATE_API"
service_id = "daf43e8c-a81a-4242-9912-4a2ebe4fdd79"
remote = true
[[vpc_services]]
binding = "PRIVATE_DATABASE"
service_id = "453b6067-1327-420d-89b3-2b6ad16e6551"
remote = true
[[vpc_services]]
binding = "INTERNAL_CACHE"
service_id = "6c39b574-237e-49f4-852a-cea5a93ed8f9"
remote = trueНеобходимые роли
Workers VPC использует следующие роли аккаунта:
Connectivity Directory Readдля просмотра Workers VPC Services и Tunnels.Connectivity Directory Bindдля получения списка, чтения и привязки VPC Services в Workers.Connectivity Directory Adminдля создания, обновления и удаления VPC Services, а также для прямой привязки к туннелям через VPC Network binding.
Описание ролей см. в Роли.
Если ваши роли были недавно обновлены, а команды всё ещё завершаются с ошибкой, обновите аутентификацию Wrangler:
npx wrangler logout
npx wrangler loginЕсли вы аутентифицируетесь с помощью API-токена (CLOUDFLARE_API_TOKEN), убедитесь, что токен принадлежит пользователю с необходимыми ролями.
Следующие шаги
- Настройте VPC Services с помощью Terraform для управления сервисами VPC Service как инфраструктурой
- Настройка Cloudflare Tunnel для вашей среды
- Подробнее о Service Binding API
- См. примеры типичных сценариев использования