代理 gRPC 流量
Google Remote Procedure Call(gRPC)是一个开源的高性能 RPC 框架,基于 HTTP/2 协议构建,并使用 Protocol Buffers(protobuf)作为接口描述语言(IDL)。
本文介绍如何通过 Ingress Controller 配置网关代理 gRPC 流量。
前置条件
- 完 成设置 Ingress Controller 和网关。
- 安装 gRPCurl,用于验证 gRPC 流量代理。
启动示例上游服务
创建 Kubernetes manifest 文件,定义 gRPC server 的 Deployment 和 Service:
grpc-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: aic
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: aic
name: grpc-service
spec:
type: ClusterIP
selector:
app: grpc-service
ports:
- name: grpc
port: 50051
targetPort: 50051
将配置应用到集群:
kubectl apply -f grpc-server.yaml
如需验证 gRPC server 是否正常运行,先将 gRPC server 的 Service 端口转发到本地:
kubectl port-forward svc/grpc-service 50051:50051 &
向该服务发送请求,列出所有可用的 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