gRPC
gRPCは、クライアントアプリケーションがリモートサーバー上のメソッドを、まるで同じローカルマシン上で実行しているかのように呼び出すことを可能にするリモートプロシージャコール(RPC)フレームワークです。gRPCサーバーとクライアントをCloudflareのグローバルネットワークに接続することで、異なるデータセンターや環境にまたがるサービスを使用するアプリケーションの構築が容易になります。
Cloudflare Tunnel supports gRPC traffic via private subnet routing. Public hostname deployments are not currently supported.
この例では、cloudflared daemonを使用してgRPCサーバーをCloudflareに接続し、Gatewayポリシーでサーバーを保護し、Cloudflare WARPクライアントを使用してサーバーへのgRPCチャネルを開きます。
-
gRPC Pythonアプリケーションをセットアップするには、このクイックスタートガイド ↗に従ってください。
-
サーバーを起動します:
~/grpc/examples/python/helloworld $ python3 greeter_server.pyWARNING: All log messages before absl::InitializeLog() is called are written to STDERRI0000 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_cacheServer started, listening on 50051Cloudflareへの安全なアウトバウンド接続を確立するには:
-
ダッシュボードセットアップガイドに従って、サーバー用のCloudflareトンネルを作成します。アプリケーションを接続するステップをスキップして、ネットワークの接続に直接進むことができます。
-
トンネルのプライベートネットワークタブで、サーバーのプライベートIPアドレス(またはサーバーIPを含む範囲)を入力します。
By default, WARP excludes traffic bound for RFC 1918 space ↗, which are IP addresses typically used in private networks and not reachable from the Internet. In order for WARP to send traffic to your private network, you must configure Split Tunnels so that the IP/CIDR of your private network routes through WARP.
-
First, check whether your Split Tunnels mode is set to Exclude or Include mode.
-
If you are using Include mode, add your network’s IP/CIDR range to the list. Your list should also include the domains necessary for Cloudflare Zero Trust functionality.
-
If you are using Exclude mode:
- Delete your network’s IP/CIDR range from the list. For example, if your network uses the default AWS range of
172.31.0.0/16, delete172.16.0.0/12. - Re-add IP/CDIR ranges that are not explicitly used by your private network. For the AWS example above, you would add new entries for
172.16.0.0/13,172.24.0.0/14,172.28.0.0/15, and172.30.0.0/16. This ensures that only traffic to172.31.0.0/16routes through WARP.
- Delete your network’s IP/CIDR range from the list. For example, if your network uses the default AWS range of
By tightening the private IP range included in WARP, you reduce the risk of breaking a user’s access to local resources.
gRPCサーバーへのアクセスをブロックまたは許可するために、Gatewayネットワークポリシーを構成できます。以下の例は、2つのポリシーで構成されています。最初のポリシーは、デバイスポスチャーチェックを通過したデバイスからのgRPC接続を許可し、2つ目は他のすべてのトラフィックをブロックします。Allowポリシーがより高い優先度を持っていることを確認してください。
| Selector | Operator | Value | Logic | Action |
|---|---|---|---|---|
| Destination Port | is | 50051 | And | Allow |
| Destination IP | is | 172.31.0.133 | And | |
| Passed Device Posture Checks | is | macOS firewall (Firewall) | And | |
| Passed Device Posture Checks | is | macOS disk encryption (Disk encryption) |
| Selector | Operator | Value | Action |
|---|---|---|---|
| Destination IP | in | 172.31.0.0/16 | Block |
Gatewayプロキシの設定に関する詳細は、Gatewayでネットワークトラフィックをフィルタリングするを参照してください。
gRPCクライアントは、デバイスにCloudflare WARPをインストールし、Zero Trust組織に登録することでサーバーに接続できます。クライアントがCloudflareトンネルを介して公開されたプライベートIPにリクエストを送信すると、WARPは接続をCloudflareのネットワークを通じて対応するトンネルにルーティングします。
gRPCクライアントをセットアップするには:
- GatewayのWARPモードでデバイスにWARPクライアントをデプロイします。
- デバイス登録ルールを作成して、どのデバイスがZero Trust組織に登録できるかを決定します。
- このクイックスタートガイド ↗に従って、デバイスにgRPCをインストールします。
greeter.pyを修正して、gRPCサーバーのプライベートIPを指すようにします。これは、Cloudflareトンネルルートで設定したのと同じプライベートIPです。例えば、
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)- クライアントデバイスで、WARPが
Connectedであることを確認します。 - gRPCクライアントアプリケーションを実行します:
~/grpc/examples/python/helloworld $ python3 greeter_client.pyWill try to greet world ...WARNING: All log messages before absl::InitializeLog() is called are written to STDERRI0000 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_cacheGreeter client received: Hello, you!トンネルにリクエストが到達し、gRPCサーバーに意図した通りに到達していることを確認するには、トンネルログを表示できます。