gRPC 桥接
gRPC 桥接沙箱是 Envoy 的 gRPC 桥接过滤器 的示例用法。
这是一个键值存储的示例,其中一个用 Python
编写的基于 http
的客户端 CLI 使用为两种语言生成的存根更新用 Go
编写的远程存储。
客户端通过将 HTTP 请求从 http/1.1
升级到 http/2
或 http/3
的代理发送消息。
[client](http/1.1) -> [client-egress-proxy](http/2) -> [server-ingress-proxy](http/2) -> [server]
本示例中展示的另一个 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 桥接过滤器。