代理 gRPC 流量
gRPC(Google Remote Procedure Call)是一个基于 HTTP/2 协议的开源、高性能的远程过程调用(RPC)框架。它使用 Protocol Buffers(protobuf)作为接口描述语言(IDL)。API7 企业版提供了包括协议转换、负载均衡、身份验证和授权等关键功能,极大地提升了 gRPC 的应用潜能。
本指南介绍了如何使用 API7 企业版代理 gRPC 服务的流量。
下面是一个交互式演示,提供了使用 API7 企业版代理 gRPC 流量的实际上手介绍。
前提条件
- 安装 API7 企业版。
- (可选)如有需要,完成在 Kubernetes 上部署 API7 Ingress Controller。
- 安装 gRPCurl,用于向 gRPC 服务发送请求以进行验证。
部署一个示例 gRPC Server
API7 提供了一个用于测试的示例 gRPC 服务。你可以根据你的 API7 安装环境,选择在 Docker 或 Kubernetes 中启动该服务。
启动服务
- Docker
- Kubernetes
在 Docker 中启动一个示例 gRPC 服务,监听 50051 端口:
docker run -d \
--name grpc-service \
--network=api7-ee_api7 \
-p 50051:50051 \
--restart always api7/grpc-server-example:1.0.0
为 gRPC 的 Deployment 和 Service 创建一个 Kubernetes 资源清单文件:
grpc-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: api7
name: grpc-service
spec:
replicas: 1
selector:
matchLabels:
app: grpc-service
template:
metadata:
labels:
app: grpc-service
spec:
containers:
- name: grpc-service
image: api7/grpc-server-example:1.0.0
ports:
- containerPort: 50051
---
apiVersion: v1
kind: Service
metadata:
namespace: api7
name: grpc-service
spec:
type: ClusterIP
selector:
app: grpc-service
ports:
- name: grpc
port: 50051
targetPort: 50051
将配置应用到你的集群:
kubectl apply -f grpc-server.yaml
验证安装
- Docker
- Kubernetes
将服务的 50051 端口转发到你本地机器的端口上:
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