开发者学堂课程【5分钟玩转阿里云容器服务:进阶课程:如何在 ACK 中使用 MSEIngr ess】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1038/detail/15868
进阶课程:如何在 ACK 中使用 MSE Ingress
内容介绍
三、MSE Ingress 实践
四、MSE 产品定位和竞争力
三、MSE Ingress 实践
1.MSE Ingress 最佳实践(统一东西南北流量)
举个例子,北项网关是用户的两个 VPC,两个业务域。北项网关进入通过云原生网关,东西向网关跨业务域也需要云原生网关,采用一个内核统一去做对整个运维人员包括操作的开发人员都是非常简单的。 云原生网关在统一东西南北流量时的好处:
第一是在北向统一接入一个网关把所有的北项的入口网关全部统一。对北项有两个非常大的优势,第一个是从云原生网关、从 Ingress 的入口角度来说,安全的防线。第二是支持微服务网关的整合能力,因此可以在入口建立一个高可用的防线,并且和微服务全链路的灰度的一些高可用的能力打通,提升整个系统的高可用能力。
对上建立了整个安全的、高可用的一个防线,对下支持单体应用,Nacos 微服务的应用,网格的应用和 Serverless 所有多种服务发现模式。也就是说流量进入,统一防疫之后,不论是什么负担,都可以把它路由下去,这就是统一接入优势。第三个是跨域互通,就是东西亚网关,东西亚网关就是 Ingress ,Ingress 是一个入口一个出口的意思。为什么有这种跨域互通,经常有一些公司会把两个 VPC 直接拉通,直接呼叫。这样带来的问题是网络断网之后,你的风险是不可控的,你的 ip 也是不可控的。因此跨域之间建议通过网关互动,这是在阿里积累的经验。
比如东西亚网关跨域互通有哪些场景呢?比如说两个不同的安全,例如阿里的蚂蚁是金融域,其跟电商域是不同的域,所以其安全是不一样的。包括阿里上云的过程中,比如钉钉上云中的云上云下,包括云边其网络默认都是不通的。
上云的过程中一部分上云一部分不上云,是云上云下的互通。包括不同的协议,可以通过网关做一些转化。因此在东西向我们也通过 MSE Ingress,云原生网关际上是东西流量互通,因为整个内核采用 enevy 去做,所以在社区中是标准的可以控制东西南北的流量,一站式的解决方案。无论是出口北项的公网到内网,内网多个安全域,多个业务域之间的,全部统一的网关解决发案。这是我们推荐的最佳姿势,在这个最佳的姿势里,怎么从传统的之前的这种网络模式迁到云原生网关的模式。
2.平衡迁移实践(方案一)
有两个方案,第一个就是说如果用户有DNS的,比如说有域名的,那就是从域名上去迁。第一个从能力上,因为 MSE Ingress 云原生网关已经兼容 Nginx 的注解情况,因此从服务发现上只要把网关创建,默认就会到对应的 K8s 的资源。这样是从路由上,因为都是同样的路由,都是通过 Ingress 去定义的,因此我的服务发现、路由规则就已经跟传统的网络一样了。
剩下的健康云原生网关做好路由之后,下一步只需要从域名上按照不同的权重把这个 srb 传统的流量网关的 Ingress 的 srb 迁到云原生网关的 srb 上。这是比较平稳的模式。
3.平衡迁移实践(方案二)
当然还有很多公司不用 DNS,因为 DNS 解析包括缓存问题,很多公司不好解决。他们做了一个模式,就是直接把 srb 写死,中小公司有一些是这么做的,把 srb 直接暴露出去。这种模式对下其实是一样的,我们可以监听所有的 K8s 的路由和资源,这样的话只需要用户在自己的 srb 上把云原生网关的 IP 挂到 srb 下。
这样就可以按照 srb 的权重一步一步的把流量切到云原生网关,如果有问题马上回滚,这样可以最大限度的控制整个爆炸半径,当出问题时,我们也可以用最快的速度进行回滚,这是我们的一个优势。
4.MSE Ingress 上海费芮案例
上海费芮最早在金融领域的架构采用的是自建的 Nginx Ingress,其数据面和控制面都在一个 Pod 中。有几个问题,第一个是当时没有专门的网关运维人员,因为其实网关其实还是非常专业的,设计安全,微服务,包括开发是非常焦急的一个地方,费芮这块整个运维经验是不足的。
第二是费芮在采用了 Nginx Ingress 的实践过程中遇到了一些安全和稳定性的问题,大家也可以去查阅社区的资料,因为控制面和数据面在一起会带来稳定性的问题和安全问题。包括压力大的时候,控制面 Nginx Ingress controller 可能会影响 Nginx 的稳定性。第三是往后端去转时,不支持这个TLS的一些版本设置和对应的最前线的一些黑白单的机制。
这是费芮为什么要从自建的 Ingress 迁到云原生网关,他是需要云原生网关这些能力的。下面是其迁到云原生网关的架构,移到云原生网关最下边其实可以大家可以看到是没有任何变化的。变化的其实是左边,左边就是从 Nginx Ingress 迁到云原生网关,迁到云原生网关后,整个数据面和控制面是完全独立的,这样的话安全稳定性会得到更好的保障,也满足了黑白名单和 TLS 版本设置的一些需求。从切流上,费芮是采用入口 DNS 切流,从他的DNS把流量切到云原生网关,后面所有的路由都是不变的。
5. MSE Ingress DEMO
准备: 在演示时就演示了网关创建完成之后,后面会有一个应用,这个应用会有三个版本,就是 v1版本,v2、v3版本,在测试的过程中很多的用户都会发一个版本上去,通过不同的UID 或者不同的参数录入,这样控制爆炸半径。这个是目前实现的比较多的场景。因此这又需要我们去部署三个测试的样例,就是对应配置 Ingress 资源。
(1)RAM授权: AliyunMSEFullAccess
首先到 ACK 的集群中,举例(要 demo 的ACK 实例):
点击进入后到集群的资源管理然后去创建授权:
(2)应用目录:创建 ack-mse-ingress-controller
授权后进入 ACK 的应用市场,在微服务的栏目下找到 ack-mse-ingress-controller ,可以看到前提要求:
然后点击部署,选择要 demo 的集群,因为网关要关联对应的 K8s集群,关联完成后可以看到配置的参数,参数较简单,不需要做太多的部署,其中授权的模式选择的是 ranrole,可以改变授权的模式,按照文档操作。如果要采用 aksk,需要填写内容:
确定没问题后点击确定即可。
(3)自定义资源:声明式配置 MselngressConfig 创建网关
通过自定义资源创建:
把上面 controller 中一个小的代码样目片段,按照其创建,就可以看到资源全部存在了。
代码样目片段如下:
oplVersion:msc.olibobocloud.com/vlalpho1
kind:MseIngressConfig netodate:
name:simple
网关是否创建成功:
点击浏览对象,可以看到准备状态为 listening 说明云原生网关已经创建成功:
在 MSE 的控制台也可以看到创建是否成功:
(4)创建对应的路由
6.MSE Ingress 演示灰度发布
按照 Header 做多版本路由,实现灰度效果
该镜像创建了三个实例,分别是 v1版本,v2、v3版本,该版本已经部署完成,下一步需要做的应用通过样目创建完成后到路由中做简单的配置。这里可以看到已经提前创建了三个路由,都是标准的样目模式。
v2 是当 user-id 等于100时,在往后路由的时候加 tag 等于 v2,这样后端的应用就可以根据不同的 head 展示不同的功能。
通过命令行的模式可以看到路由的效果:
请求网关的域名 IP,访问一个 head 时,可以路由到后面不同的应用。当请求 cur1 时,默认情况下走的是 v1 版本,也就是路由到后面的整个 v1,没有对应的 tag 。
加 user-id:100 时,后路由会路由到后端 v2 的版本,并且在向后路由时,加上了 tag 等于 v2,后端就可以做业务逻辑上的一些开关。 加 x-user-id:200 时,会到 v3 版本,,并且在返回的 tag 中打上一个 v3 的 tag 。
上面简单介绍了云原生网关在路由上的能力,通过不同的 user-id 路由到不同的版本(一般用两个,但是我们支持更多的能力),通过这个灰度能力,开发可以最小控制爆炸半径,做线上发布。包括全链路的一个发布和 MSE Ingress 的复制里做到一起后可以支持全链路的灰度能力。大家可以体验一下,上面演示的只是最关键的几个关键步骤,大家可以免费的体验使用 MSE Ingress 的功能。
四、MSE 产品定位和竞争力
微服务引擎( Micro Service Engine,简称 MSE)是一个面向业界主流开源微服务生态的一站式微服务平台
竞争力∶三位一体,阿里微服务 DNS 开源最佳实践+商业化解决方案+阿里双十一大规模生产实践验证(默认高可用)
三位一体主要指阿里自源的体系,与阿里巴巴开源的体系,商业化是一个架构。这样的好处是开源在国内有50%以上使用用户的实施标准,然后会持续在开源发力,任何开源的问题团队都有保障。第二在商业化上,是开箱即用的解决方案,帮助用户在入口建立安全和高可用对的方案。第三是在阿里内部,是经过阿里双十一的大规模验证,相比于很多小公司自研的体系,是经过各大规模的考验,提供的是一个默认高可用的解决方案。就是阿里微服务默认的优势就是高可用,通过服务治理给用户默认高可用的微服务体系。
为什么 Ingress 这个产品不直接在 ack 里做,要在 MSE 微服务里做呢?
原因:首先就是说网关,网关有四个象限。Ingress 流量网关是最主流的一个场景,基于微服务,流量网关和微服务网关二合一,相当于把云原生网关全部整合,推出了云原生网关,支持 Ingress 的标准,微服务能力领域的增强,安全领域也增强。如果不用 Ingress 微服网关,也是可以的。在整个领域中,Ingress 是容器和微服务非常大的一个交集,交集的意思 K8s 通过 Ingress 把入口网关、流量网关标准化。流量网关是整个微服务网关的入口,标准的控制东西南北的流量。目前看云原生架构,容器、微服务、不可变基础设施,满足这两个条件的是云原生架构,因此,容器和微服务两个产品又在密切的演进和集成。Ingress 就是容器和体系最大的交集,也是最大的入口。 在此基础之上,往后路由不管是 dubbo、envoy 还是另外网格的模式,路由都可以做到。在传统的微服务体系中,Nacos 也支持。然后下图左边整个微服务体系中,本质上就是连接控制,右边是控制面,基于整个 Istio\Opensergo 的一个标准,我们会通过限流,降级,熔断,这是灰度的能力提高微服务体系的整个链路的整个高可用能力。服务治理的核心是帮业务把整个微服务的高可用进一步的提升,这样复制里又是一个贯穿从网关到全链路灰度的能力和治理的能力,甚至到数据库上的一个治理能力。
介绍另一种操作模式:
在服务来源中看到 K8s 可以关联网关,也可以从网关去关联 K8s 集群:
默认可以支持 K8s 等等的服务发现模式。