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

gRPC

gRPC представляет собой фреймворк удаленного вызова процедур (RPC), который позволяет клиентским приложениям вызывать методы на удаленном сервере так, как если бы эти методы выполнялись на локальном компьютере. Вы можете подключать серверы и клиенты gRPC к глобальной сети Cloudflare, что упрощает разработку приложений, использующих сервисы в разных дата-центрах и окружениях.

Cloudflare Tunnel поддерживает трафик gRPC через маршрутизация частной подсети. Развертывание с публичным именем хоста пока не поддерживается.



В этом примере мы подключим сервер gRPC к Cloudflare с помощью cloudflared демон, защитите сервер с помощью политик Gateway и откройте канал gRPC к серверу с помощью Cloudflare One Client.

1. Настройте gRPC-сервер

  1. Чтобы настроить приложение gRPC на Python, следуйте этому руководство по быстрому старту.

  2. Запустите сервер:

~/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 50051

2. Подключите сервер к Cloudflare

Чтобы установить безопасное исходящее соединение с Cloudflare:

  1. В панели управления Cloudflare перейдите в Сеть > Tunnels.

    Перейдите в Tunnels ↗
  2. Создать новый туннель или отредактировать существующий cloudflared туннель.

  1. В панели управления Cloudflare перейдите в Сеть > Маршруты.

    Перейдите в Маршруты ↗
  2. Выберите Создать маршрут > Tunnel CIDR. Выберите только что созданный туннель, введите приватный IP-адрес или CIDR-адрес вашего сервера и выберите Создать маршрут.

3. Направьте IP-адреса частной сети через Cloudflare One Client

По умолчанию WARP исключает трафик, направленный на Пространство адресов RFC 1918, то есть IP-адреса, обычно используемые в частных сетях и недоступные из интернета. Чтобы Cloudflare One Client мог отправлять трафик в вашу частную сеть, необходимо настроить Split Tunnels чтобы трафик к IP-адресу/CIDR вашей частной сети направлялся через Cloudflare One Client.

  1. Сначала проверьте, ваш Режим Split Tunnels имеет значение Exclude или Включить режим.

  2. Измените маршруты 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-адреса нужно добавить повторно, можно воспользоваться следующим калькулятором:

    Инструкции для калькулятора

    1. В Базовый CIDR, введите диапазон RFC 1918, который вы удалили из Split Tunnels.
    2. В Вычтенные CIDR, введите диапазон IP/CIDR, используемый вашей приватной сетью.
    3. Повторно добавьте результаты калькулятора в список режима Exclude для Split Tunnel.

    Сужая диапазон частных IP-адресов, включенный в Cloudflare One Client, вы снижаете риск нарушить работу пользовательского доступ к локальным ресурсам.

    Если вы используете Включить режим:

    1. Добавьте необходимые Домены Zero Trust или IP-адреса в список включений Split Tunnel.
    2. Добавьте маршрут чтобы включить диапазон IP/CIDR вашей частной сети.

Вы можете настроить Политики 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:

  1. Разверните Cloudflare One Client на вашем устройстве в режиме Traffic and DNS.
  2. Создать правила регистрации устройств чтобы определить, какие устройства могут регистрироваться в вашей организации Zero Trust.
  3. Установите gRPC на устройстве, следуя этому руководство по быстрому старту.
  4. Изменить 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. Проверьте подключение

  1. На клиентском устройстве убедитесь, что Cloudflare One Client Connected.
  2. Запустите приложение клиента 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 так, как задумано.