什么是API Gateway
在微服务中,一次用户操作的流程如下:
- 用户在浏览器点击我们的应用
- 浏览器访问我们的FrondEnd服务,获取JS、HMTL、CSS、Image等等静态资源
- 浏览器执行JS,发送API请求
- 浏览器发送的API请求到达API Gateway
- Gateway根据API的路由规则,将请求转发给特定微服务
- 特定微服务处理完成请求后,返回给Gateway
- Gateway返回请求给浏览器
- 浏览器JS处理返回数据,重新渲染结果
什么是K8S Ingress
K8S Ingress 是为了让外部访问k8s cluster内部服务API的入口。典型的是HTTP请求访问。
Ingress可以做到:
- API路由
- SSL证书
- 负载均衡
为什么K8S中选择Gateway是一个纠结的选项
第一, K8S本身提供了多种gateway的备选
- ingress能够实现部分API gateway的能力
- K8S内部有专门的API Gateway可以使用
- ISTIO提供了强大的GATEWAY
第二,微服务框架本身提供了多种API Gateway
问题来了,我们应该选择K8S API Gateway能力呢? 还是说,选择微服务框架自身的API gateway? 如果选择了K8S的API Gateway,那么应该选择哪些ingress还是API gateway或者是ISTIO?
这里有两种流派:
- 把K8S作为部署平台,不跟他耦合,所有的业务在自己的代码里,包括路由等基本gateway能力、以及熔断等高级gateway逻辑
- 把K8S作为应用的一部分,将API路由、熔断、等等交给K8S或者ISTIO来承载
To be continued...