← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-tunnel / use-cases
gRPC
gRPC представляет собой фреймворк удаленного вызова процедур (RPC), который позволяет клиентским приложениям вызывать методы на удаленном сервере так, как если бы эти методы выполнялись на локальном компьютере. Вы можете подключать серверы и клиенты gRPC к глобальной сети Cloudflare, что упрощает разработку приложений, использующих сервисы в разных дата-центрах и окружениях.
Cloudflare Tunnel поддерживает трафик gRPC через маршрутизация частной подсети. Развертывание с публичным именем хоста пока не поддерживается.
В этом примере мы подключим сервер gRPC к Cloudflare с помощью
cloudflared демон, защитите
сервер с помощью политик Gateway и откройте канал gRPC к серверу с помощью
Cloudflare One Client.
1. Настройте gRPC-сервер
-
Чтобы настроить приложение gRPC на Python, следуйте этому руководство по быстрому старту ↗.
-
Запустите сервер:
~/grpc/examples/python/helloworld $ python3 greeter_server.py
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1721770418.373806 3677 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, event_engine_dns, event_engine_listener, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache
Server started, listening on 500512. Подключите сервер к Cloudflare
Чтобы установить безопасное исходящее соединение с Cloudflare:
-
В панели управления Cloudflare перейдите в Сеть > Tunnels.
Перейдите в Tunnels ↗ -
Создать новый туннель или отредактировать существующий
cloudflaredтуннель.
-
В панели управления Cloudflare перейдите в Сеть > Маршруты.
Перейдите в Маршруты ↗ -
Выберите Создать маршрут > Tunnel CIDR. Выберите только что созданный туннель, введите приватный IP-адрес или CIDR-адрес вашего сервера и выберите Создать маршрут.
3. Направьте IP-адреса частной сети через Cloudflare One Client
По умолчанию WARP исключает трафик, направленный на Пространство адресов RFC 1918 ↗, то есть IP-адреса, обычно используемые в частных сетях и недоступные из интернета. Чтобы Cloudflare One Client мог отправлять трафик в вашу частную сеть, необходимо настроить Split Tunnels чтобы трафик к IP-адресу/CIDR вашей частной сети направлялся через Cloudflare One Client.
-
Сначала проверьте, ваш Режим Split Tunnels имеет значение Exclude или Включить режим.
-
Измените маршруты Split Tunnel в зависимости от режима:
Если вы используете Exclude режим:
a. Удалите маршрут содержащий диапазон IP/CIDR вашей частной сети. Например, если в вашей сети используется диапазон AWS по умолчанию
172.31.0.0/16, удалите172.16.0.0/12.b. Повторно добавить диапазоны IP/CIDR которые явно не используются вашей частной сетью. Для приведенного выше примера AWS вы бы добавили новые записи для
172.16.0.0/13,172.24.0.0/14,172.28.0.0/15, а также172.30.0.0/16. Это гарантирует, что только трафик к172.31.0.0/16маршруты через Cloudflare One Client.Чтобы определить, какие IP-адреса нужно добавить повторно, можно воспользоваться следующим калькулятором:
Инструкции для калькулятора
- В Базовый CIDR, введите диапазон RFC 1918, который вы удалили из Split Tunnels.
- В Вычтенные CIDR, введите диапазон IP/CIDR, используемый вашей приватной сетью.
- Повторно добавьте результаты калькулятора в список режима Exclude для Split Tunnel.
Сужая диапазон частных IP-адресов, включенный в Cloudflare One Client, вы снижаете риск нарушить работу пользовательского доступ к локальным ресурсам.
Если вы используете Включить режим:
- Добавьте необходимые Домены Zero Trust или IP-адреса в список включений Split Tunnel.
- Добавьте маршрут чтобы включить диапазон IP/CIDR вашей частной сети.
4. (Рекомендуется) Создайте политику Gateway
Вы можете настроить Политики Network Gateway либо заблокировать, либо разрешить доступ к серверу gRPC. Следующий пример состоит из двух политик: первая разрешает gRPC-подключения с устройств, которые прошли проверки состояния устройства, а вторая блокирует весь остальной трафик. Убедитесь, что политика Allow имеет более высокий приоритет.
1. Разрешите защищённые устройства
| Селектор | Оператор | Значение | Логика | Действие |
|---|---|---|---|---|
| Порт назначения | является | 50051 |
И | Allow |
| IP-адрес назначения | является | 172.31.0.133 |
И | |
| Пройденные проверки состояния устройства | является | macOS firewall (Firewall) |
И | |
| Пройденные проверки состояния устройства | является | macOS disk encryption (Disk encryption) |
2. Заблокируйте всё остальное
| Селектор | Оператор | Значение | Действие |
|---|---|---|---|
| IP-адрес назначения | in | 172.31.0.0/16 |
Block |
Дополнительные сведения о настройке прокси Gateway см. в Фильтруйте сетевой трафик с помощью Gateway.
5. Настройте клиент
Клиенты gRPC могут подключаться к серверу, установив на устройстве Cloudflare One Client и зарегистрировавшись в организации Zero Trust. Когда клиент отправляет запрос к приватному IP-адресу, открытому через Cloudflare Tunnel, WARP направляет соединение через сеть Cloudflare к соответствующему туннелю.
Чтобы настроить клиент gRPC:
- Разверните Cloudflare One Client на вашем устройстве в режиме Traffic and DNS.
- Создать правила регистрации устройств чтобы определить, какие устройства могут регистрироваться в вашей организации Zero Trust.
- Установите gRPC на устройстве, следуя этому руководство по быстрому старту ↗.
- Изменить
greeter.pyи укажите на приватный IP-адрес вашего сервера gRPC. Это тот же приватный IP-адрес, который настроен в Маршруты Cloudflare Tunnel. Например,
def run():
# NOTE(gRPC Python Team): .close() is possible on a channel and should be
# used in circumstances in which the with statement does not fit the needs
# of the code.
print("Will try to greet world ...")
with grpc.insecure_channel("172.31.0.133:50051") as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(helloworld_pb2.HelloRequest(name="you"))
print("Greeter client received: " + response.message)6. Проверьте подключение
- На клиентском устройстве убедитесь, что Cloudflare One Client
Connected. - Запустите приложение клиента gRPC:
~/grpc/examples/python/helloworld $ python3 greeter_client.py
Will try to greet world ...
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1721771484.489711 4414247 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, event_engine_dns, event_engine_listener, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache
Greeter client received: Hello, you!Можно просмотреть Журналы туннеля чтобы убедиться, что запросы поступают в туннель и доходят до сервера gRPC так, как задумано.