gRPC 橋接
gRPC 橋接沙箱是 Envoy 的 gRPC 橋接過濾器 的範例用法。
這是一個鍵/值儲存的範例,其中以 Python
編寫的基於 http
的用戶端 CLI,使用為兩種語言產生的存根更新以 Go
編寫的遠端儲存。
用戶端透過代理傳送訊息,該代理將 HTTP 請求從 http/1.1
升級為 http/2
或 http/3
[用戶端](http/1.1) -> [用戶端出口代理](http/2) -> [伺服器入口代理](http/2) -> [伺服器]
此範例中展示的另一個 Envoy 功能是 Envoy 透過其路由組態執行權限基礎路由的能力。
步驟 1:產生協定存根
變更至 examples/grpc-bridge
目錄。
提供了一個 docker compose 檔案,可從 protos
目錄中的規格為 client
和 server
產生存根。
檢查 docker-compose-protos.yaml
檔案,您會看到它包含產生協定存根所需的 python
和 go
gRPC protoc 命令。
如下所示產生存根
$ pwd
envoy/examples/grpc-bridge
$ docker compose -f docker-compose-protos.yaml up
Starting grpc-bridge_stubs_python_1 ... done
Starting grpc-bridge_stubs_go_1 ... done
Attaching to grpc-bridge_stubs_go_1, grpc-bridge_stubs_python_1
grpc-bridge_stubs_go_1 exited with code 0
grpc-bridge_stubs_python_1 exited with code 0
您可以使用以下命令清除剩餘的容器
$ docker container prune
您可以在各自的目錄中檢視為用戶端和伺服器產生的 kv
模組
$ ls -la client/kv/kv_pb2.py
-rw-r--r-- 1 mdesales CORP\Domain Users 9527 Nov 6 21:59 client/kv/kv_pb2.py
$ ls -la server/kv/kv.pb.go
-rw-r--r-- 1 mdesales CORP\Domain Users 9994 Nov 6 21:59 server/kv/kv.pb.go
這些產生的 python
和 go
存根可以做為外部模組包含。
步驟 2:啟動所有容器
若要建置此沙箱範例並啟動範例服務,請執行下列命令
$ pwd
envoy/examples/grpc-bridge
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
grpc-bridge_grpc-client-proxy_1 /docker-entrypoint.sh /bin ... Up 10000/tcp, 0.0.0.0:9911->9911/tcp
grpc-bridge_grpc-client_1 /bin/sh -c tail -f /dev/null Up
grpc-bridge_grpc-server-proxy_1 /docker-entrypoint.sh /bin ... Up 10000/tcp, 0.0.0.0:8811->8811/tcp
grpc-bridge_grpc-server_1 /bin/sh -c /bin/server Up 0.0.0.0:8081->8081/tcp
步驟 3:傳送請求至鍵/值儲存
若要使用 Python 服務並傳送 gRPC 請求
$ pwd
envoy/examples/grpc-bridge
設定金鑰
$ docker compose exec grpc-client python /client/grpc-kv-client.py set foo bar
setf foo to bar
取得金鑰
$ docker compose exec grpc-client python /client/grpc-kv-client.py get foo
bar
修改現有金鑰
$ docker compose exec grpc-client python /client/grpc-kv-client.py set foo baz
setf foo to baz
取得修改後的金鑰
$ docker compose exec grpc-client python /client/grpc-kv-client.py get foo
baz
在執行的 docker compose 容器中,您應該會看到 gRPC 服務列印其活動記錄
$ docker compose logs grpc-server
grpc_1 | 2017/05/30 12:05:09 set: foo = bar
grpc_1 | 2017/05/30 12:05:12 get: foo
grpc_1 | 2017/05/30 12:05:18 set: foo = baz
另請參閱
- gRPC 橋接過濾器.
深入了解如何設定 Envoy 的 gRPC 橋接過濾器。