kong在v1.3的版本原生支持了grpc协议, 这里说说使用kong来代理多个grpc请求.
需求是这样的,有个应用需要调用多个grpc服务, 内部测试环境都是直接通过kubernetes nodeport进行调用的,显然不是很优雅,
而kong做为我们的统一api网关,当然可以完美解决这个需求
整个链路如下:
从这个图可以看出,kong接入到grpc请求首先也是通过请求的path来转到配置的kong的service,这个service的host就可以是kubernetes对应中的service了
有两个方式实现,如下:
添加service/route
这里要注意的是,因为需要新建service/route等对象,因此需要kong-db模式
1 | # service-a |
这样,在客户端就可以通过kong暴露出来的统一端口进行访问了,而如果像本人使用的db-less的模式,有没有办法呢? 当然是有的
使用ingress
1 |
|
同时,需要kuberntes中的service如service-a的annotation添加konghq.com/protocols: grpc
即可,如下
1 | annotations: |
这样达到的效果跟上面是一样的,优点是kong使用的是db-less模式
kong在api-gateway方面还是非常方便的