使用 API7 企业版代理 gRPC 服务
Google Remote Procedure Call(gRPC)是基于 HTTP/2 协议的开源高性能远程过程调用(Remote Procedure Call,RPC)框架。gRPC 使用 Protocol Buffers(protobuf)作为接口描述语言(Interface Description Language,IDL)。API7 企业版提供协议转换、负载均衡、身份验证和授权等关键功能,增强了 gRPC 的潜力。
本指南介绍如何使用 API7 企业版代理 gRPC 服务。
下面是一个互动演示,介绍了如何使用 API7 企业版代理 gRPC 流量。
前提条件
- 安装 API7 企业版。
- 安装 gRPCurl,将请求发送到 gRPC 服务器进行验证。
部署示例 gRPC 服务器
- Docker
- Kubernetes
API7 提供了一个 gRPC 服务示例,用于测试。你可以使用以下命令在端口 50051 上启动示例 gRPC 服务器的 Docker 实例 grpc-service:
docker run -d \
--name grpc-service \
--network=api7-ee_api7 \
-p 50051:50051 \
--restart always api7/grpc-server-example:1.0.0
Start an example gRPC server listening on port 50051:
kubectl run grpc-service \
--image=api7/grpc-server-example:1.0.0 \
--port=50051 \
--restart=Always
你应该能看到类似 pod/grpc-service created 的响应。
验证 gRPC 服务器启动成功
- Docker
- Kubernetes
暴露应用的 50051 端口:
kubectl expose pod grpc-service --port 50051
你应该看到类似 service/grpc-service exposed 的响应。
将端口50051 转发到 localhost:
kubectl port-forward svc/grpc-service 50051:50051 &
通过列出所有可用的 gRPC 服务和方法来验证 gRPC 服务器是否成功启动:
grpcurl -plaintext 127.0.0.1:50051 list
你应该能看到以下输出:
grpc.reflection.v1alpha.ServerReflection
helloworld.Greeter
helloworld.TestImport
列出所有 helloworld.Greeter 服务可用的方法:
grpcurl -plaintext 127.0.0.1:50051 list helloworld.Greeter
你应该能看到以下 输出:
helloworld.Greeter.GetErrResp
helloworld.Greeter.Plus
helloworld.Greeter.SayHello
helloworld.Greeter.SayHelloAfterDelay
helloworld.Greeter.SayHelloBidirectionalStream
helloworld.Greeter.SayHelloClientStream
helloworld.Greeter.SayHelloServerStream
创建服务和路由
本示例创建一个名为 grpc-example 的服务和一个名为 helloworld.Greeter 的路由,将请求转发到上面的示例 gRPC 服务。
- 控制台
- ADC
- Ingress Controller
新增服务
- 在左侧菜单选择目标网关组下的 已发布服务 菜单,然后点击 新增服务。
- 选择 手动新增。
- 在对话框中执行以下操作:
- 名称 填写
grpc-example。 - 服务类型 选择
HTTP (七层)。 - 上游 Scheme 选择
gRPC。 - 如何找到上游 选择
使用节点。 - 点击 新增节点。
- 在新增节点对话框中,执行以下操作:
- 主机 填写你的私有 IP 地址,例如
192.168.2.103。 - 端口 填写
50051。 - 权重 填写
100。
- 主机 填写你的私有 IP 地址,例如
- 点击 新增。
创建一条路由
- 进入刚才创建好的服务,然后点击 新增路由。
- 在对话框中,执行以下操作:
- 名称 填写
helloworld.Greeter。 - 路径 填写
helloworld.Greeter/SayHello。 - HTTP 方法 选择
GET和POST。 - 点击 新增。