最近需要使用 apisix 来代理 gRPC 服务, 本文记录一下 apisix 代理 gRPC 服务以及实践过程中遇到的一些问题。
准备
在接下来的步骤前,我们需要准备一个 gRPC 服务,我们使用 kratos 简单启动一个 gRPC 服务:
一个简单的 gRPC 服务就启动了,我们先直接请求 gRPC 服务看看,通过 postman 请求接口后,接口顺利返回相应的值。
接下来我们开始本篇的主要内容: apisix 代理服务。
apisix 代理 gRPC 服务
我们使用apisix admin 接口创建 Route: upstream 的 scheme 指定为 grpc 或 grpcs,nodes指定需要代理的服务地址。
|
|
我们再通过 postman 请求代理后的服务,发现请求错误,错误信息如下:Received RST_STREAM with code 2 triggered by internal client error: Protocol error
,根据错误信息得知是协议不兼容的原因,apisix 没有开启 HTTP2支持,我们尝试另外一种方法来添加代理。
我们修改 apisix 的配置文件:
修改后再次请求接口,gRPC 正确响应返回。
如果你的 gRPC 服务使用了自己的 TLS 加密,即所谓的 gPRCS (gRPC + TLS),那么需要修改 scheme 为 grpcs,并可能需要配置相应的证书。