本文介绍分为五大块:
1,前言介绍
2,开通MSE网关
3,接入ACK及功能测试
4,建议和思考
5,总结
一,前言
在接触MSE Higress网关之前,我们有在使用WAF网关做前端安全代理,API网关做API的管理维护,使用Nginx Ingress做为K8S的流量网关,也有使用spring cloud gateway网关对微服务进行管理。
这么多网关,总体使用上来看,能满足我们的其中一个场景和功能需求,但存在数据孤岛,VPC链路不通,运维成本高,多个网关路由之间的流量性能损耗等问题。
比如:
一般使用Nginx做网关,更多作于代理,对于后端,nginx本身单独无法做到无损上下线。更多需要使用一些Lua插件补足功能上的不足,维护搭建比较麻烦。
Spring cloud gateway 微服务网关,接入门槛高,维护成本大,需要对每个后端服务进行添加依赖,Yaml编写配置,可读性差,部分组件需要对接代码。不支持ingress和k8s服务发现。我们使用ACK后,只能弃用。
后续也在使用或接触到ACK中的Nginx Ingress、ALB Ingress。但也存在不同的问题或功能缺失,比如不支持HTTP转Dubbo协议,不支持阿里云的IDaaS服务等等。
其次,鉴于Nginx Ingress的架构问题导致的性能流量损耗,通过Prometheus进行监控时候,存在的性能问题。所以基于Envoy 作为数据面架构的higress 是趋势。而MSE Ingress是基于开源的Higress开发的。
Higress开源版 之前也有测试过,整体使用上比较丝滑,这次测试MSE Higress 上手也比较快。
二,开通MSE网关
上面介绍这么多,现在正式进入正题。
开通MSE网关比较简单,开通前记得领取试用资格。
初次申请 需要授权,点击下一步即可。
但创建实例的时候遇到了问题。
显示创建失败
Creation failed:getStsCredentials 获取异常,点击重试还是不行。
没看明白这个接口报错是什么意思,明明开通的时候,已经授权过系统默认权限了,使用的是默认资源组,去文档里也没有搜到。
打算放弃的时候,再点了下重试,很意外竟然创建成功了,可是我什么都没有操作过,只是多等了10分钟。
三,接入ACK及功能测试
测试场景:
关联ACK Serverless集群,测试一个服务,配置关联一个新域名。比如 主域名为 higress-inc.com.
关联ACK集群
点击勾选监听k8s ingress。
开启监听Ingress配置后,云原生网关会自动监听Ingress资源的变化,并生效Ingress资源中域名、路由的相关配置。
1,关联应用
关联容器服务后,选择关联当前service应用。
(如果没有ACK下相关deployment/service等,请先参照文档创建。此处不介绍了。https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-a-stateless-application-by-using-a-deployment?spm=a2c4g.11186623.0.i5)
添加完毕
2,创建域名
此处测试的自定义主域名为:higress-inc.com.
那应用域名为:demo-codeup.higress-inc.com.
控制台支持完整域名(如:hello.com)或泛域名(只能匹配一级,如 *.hello.com 只能匹配 a.hello.com 等域名,无法匹配 a.b.hello.com),独立管理该域名的协议及证书,且域名能将路由配置相互隔离。
此处配置使用HTTP协议,因为是测试域名,自建SSL证书就不去操作了。如果是正式环境,建议购买正规SSL证书,以及使用HTTPS协议。
添加完成
可以对该域名进行编辑 和 点击进行域名解析关联,使用HTTPS的,也可以看到SSL证书相关信息。
3,创建路由
此处路由就是ACK的ingress,定义好路由规则,将请求转发到后端服务,这也是传统流量网关的基本功能。
这里需要说明下 ,路径规则匹配
● 精确匹配:即完全匹配,例如Path等于/user,那只能访问/user的路由,不能访问/user/path等类似路由。
● 前缀匹配:以前缀作为匹配条件,例如Path以/user开头,能访问/user/path等类似路由。
● 正则匹配:以正则表达式作为匹配条件,使用RE2正则表达式语法。
这里能直接做表达式的检测。好评👍
需要注意下路由访问优先级。
存在多条路由规则时,按照关联域名 > 路径(Path)> 请求头(Header)> 请求参数(Query)> 创建时间的优先级从高到低依次进行排序。
点击下一步进行路由服务选择。
选择单服务。(多服务适合混部,多版本等场景。)
如果服务出现问题,需要将业务流量降级容灾,可以设置fallback服务。当主服务出现故障,可以将流量打到fallback服务,此处的容灾服务是demo-codeup-fallback-svc。
点击发布上线。
已经发布上线的可以进行策略配置、下线维护等操作。
4, 路由测试
路由配置完成,并且发布后,就可以进行测试。
本来还想在本地绑定host做路由测试,没想到MSE控制台就可以直接测试,直接在控制台做了host绑定。点赞👍
5,监控报警日志
此处将报警信息通过运维发出。可以在arms里告警管理新建通知策略。
点击保存创建
关闭 pod后,服务状态立马变异常。
测试路由,返回503
基础监控能看到服务请求出错。
但遗憾,设置为任意服务,都没有监听到错误和收到报警。
看板监控
可以看到访问的一些信息和网关资源的监控信息。
日志中心
既然接入日志SLS了,就可以设置SLS侧的告警。
6,fallback演练
上面已经介绍了新建的主服务是demo-codeup,容灾服务是demo-codeup-fallback-svc。
路由也配置开启了fallback服务。
路由测试主服务,返回正常。
现在停止主服务demo-codeup,将容器pod缩为0,我们观察下fallback 是否生效。
此时服务已经显示异常。
继续测试以上路由, 发现返回的结果为不同的内容,测试符合结果预期,容灾生效。
继续进行恢复主服务测试。
将主服务demo-codeup pod恢复
查看服务已经恢复正常。
此时再进行路由调试,流量重新打回主服务demo-codeup了。
路由流量恢复正常,只不过期间等了大概1-2分钟,估计是在做failover切换检测。
7,策略配置
MSE网关路由策略支持限流、重写、跨域CORS、失败重试、认证、流量复制等场景。
此处设置了流控规则,当超过 20QPS的时候,会调用 AHAS服务进行行为管理,比如自定义返回页面,跳转指定页面等。
8,黑白名单测试
开启白名单,生效粒度为网关全局和域名级别。
此处设置全局网关只允许本地出口IP访问。
测试:
本地能正常访问
但MSE网关就不能做路由调试了,返回access denied。
结果符合预期。
如果使用黑名单,建议先关闭冲突的白名单策略。
配置黑名单策略后,默认全局允许访问,除了黑名单内的地址是拒绝访问的。
9,鉴权
认证鉴权是网关的刚需,MSE云原生网关不仅提供常规的JWT认证,也提供基于授权开放网络标准OAuth 2.0的OIDC认证。MSE支持JWT、OIDC、IDaaS、自建的鉴权服务方式鉴权。支持阿里云的云服务IDaaS,非常棒,👍。
比如,对接阿里云内应用,实现 SSO,进行统一账户管理,降低成本,提高安全。
10,插件管理
MSE网关支持插件市场中的插件,以及可以上传自定义开发的插件,也可以直接使用Lua脚本在线编辑插件
四,建议和思考
建议1
Creation failed:getStsCredentials 获取异常
这块体验不是非常好,既搜不到相关错误说明,又没有具体日志透出。
建议对报错信息进行引导说明,不然用户会一头雾水,不知所措。
建议2
业务中会存在很多路由策略,建议可以批量进行路由配置维护,比如批量下线,发布,上线等。
建议3
一个小问题,对域名进行监控观察的时候,发现鼠标移到数据线(mouseOn)的时候,未发现赋值变化。
建议4
不支持WAF 2.0
当前虽然WAF2.0 已经不售卖,但存在大量历史用户,MSE Ingress 使用WAF 必须开启WAF 3.0,
但WAF 2.0 和3.0不能共存,所以不敢轻易在MSE侧启用开通WAF功能。
建议5
如果需要接入API网关,功能位置变更,无法实现三合一网关。
因为WAF版本原因(在用WAF2.0),无法启用MSE网关和WAF关联。
原则上 只要将当前使用的WAF2.0升级到WAF3.0 即可,然后再开通关联。
如果在使用API网关的话(对API进行生命周期管理服务),不能使用WAF和 MSE网关直接关联,需要WAF和API网关关联后,再在API网关设置后端服务接入MSE网关,MSE网关位置则变成是容器服务的7 层代理入口。
五,总结
本次只是测试了MSE 网关众多功能中的几个小场景,整体而言,MSE网关 在部分场景下,还是非常值得使用的,比如只是纯流量网关、微服务网关、安全网关可以合并使用的场景。能实现高集成、可运维、易扩展、热更新的功能。通过DevOPS驱动多网关融合,进行降本增效,通过声明式管理,让发布更高效,助力业务快速发展。我会积极拥抱MSE网关,你呢?