1.单块应用时代

早期的应用我们是以单块实现的,web浏览器与单块web应用中间是通过HTML和HTTP的形式交互

k8s 云原生网关_k8s 云原生网关

2.单块+API时代

自从无线应用兴起,要想使Web应用和无线应用进行通信,需暴露REST API接口,这样无线应用就以XML/JSON的方式来和后端的Web应用交互

k8s 云原生网关_网关_02

3.微服务时代?

随着企业业务和团队的进一步扩大,企业服务会进入一个解耦拆分的阶段,会演变出目前最主流的微服务形态,这时候会引来一个前端与后端耦合的问题,两者会出现一个网状结构,只要一边有变化可能会影响另一边的变化,例如内部的微服务项目很多时,需要更多的域名来暴露这些应用,对应的前端也会耦合这些端口,随着微服务持续增加的话,这种架构显然难以扩展,会直接影响企业服务的应用

k8s 云原生网关_k8s 云原生网关_03

4.微服务+网关

网关的引入可以使前端与后端进行解耦,使得两边不直接依赖,可以相互独立变化,网关的作用主要是七层反向代理,当前端进行访问时,Gateway会根据请求的内容进行路由转发至后端的微服务,它属于后端微服务的一个统一入口,还可支持安全认证,日志监控等功能

k8s 云原生网关_网关_04

5.公有云K8s通过LB暴露服务

在阿里云K8S环境中,为了将Petclinic微服务暴露在公网,我们在发布时Service时需要指定它的Type为LoadBalancer,还需额外购买阿里云提供的LB进行配置暴露服务,使用户能够访问

k8s 云原生网关_安全认证_05

6.如何暴露多个服务?

在公有云上暴露一个服务需申请一个LB,如果要暴露3个服务呢?方案一需要申请3个LB,从成本角度来将,显然是不合适不可扩展的。

k8s 云原生网关_微服务_06

7.K8s Ingress

为了解决以上问题,K8S引入了Ingress组件,它和网关类似,本身是七层反向代理,引入Ingress之后,运维人员只需购买一个LB就可以将多个服务暴露出去使用户访问,实现的原理就是依靠Ingress来实现转发,新增服务要暴露的话,只需在Ingress上添加对应的路由规则即可;Ingress作为K8S集群流量接入的入口,所以它也可实现安全认证,流量治理等功能,Ingress它是K8S中的一种服务(Service)

k8s 云原生网关_分布式_07

8.回顾Petclinic微服务的阿里云部署

阿里云这套微服务架构,当时没有引入Ingress组件,是怎么做到只需一个LB的呢?用的是Gateway,它等价于Ingress组件,核心作用都是反向路由,内部的微服务应用通过Gateway可以统一暴露出去。

k8s 云原生网关_k8s 云原生网关_08

9.总结

(1)微服务网关 = K8s Ingress,本质:都是七层反向代理,微服务集中出入口,可以降低暴露多个微服务的复杂性和成本
(2)核心功能:反向路由
(3)高级功能:安全认证,日志监控,流量治理等