java|如何在 ACK 中使用 MSE Ingress

作者:彦林
随着云原生架构的普及,K8s 通过 Ingress 标准逐步把流量网关标准化,微服务网关作为微服务的入口正在加速跟流量网关融合,Ingress 作为容器和微服务的交集,作为数字世界的入口,作为安全和高可用的第一道防线变得越来越重要!本文将为大家分享一下 Ingress 标准 和 实现的趋势,介绍一下 MSE Ingress 在这个趋势下的优势和实践,为大家做关键入口选择多一些参考。
Ingress 趋势 K8s Ingress由标准和实现两部分组成, 下面我们分别探讨一下他们各自的现状和发展趋势。
Ingress 标准现状
我们把网关按照入口-内部,2C-2B 分成四个象限,每个象限都有一个网关子领域,目前 Ingress 主要定义的是流量网关的标准,但是不能很好的定义 API 网关(API管理) 和 微服务网关(服务治理)场景,更无法定义集成网关(新老系统协议转换和接口集成)场景;因此 Ingress 从标准上往 Gateway-API 方向去演进,解决 API 管理和 微服务治理的问题,但是演进需要比较长时间,当前由于 Ingress 标准定义能力比较有限,不同的实现通过各自方法扩展,但是扩展方式在分化,因此 Ingress 作为标准的价值弱化,面对未来 Ingress 标准该何去何从?
java|如何在 ACK 中使用 MSE Ingress
文章图片

Ingress 标准趋势
从社区的反馈上看,Ingress 长期会往 Gateway API 场景去演进,中短期并存,短期以 Ingress 为主去扩展;目前 Gateway API 目前也发了 Beta 版本,基本定型;Gateway API 中增加了对 API 管理和微服务领域的增强。
java|如何在 ACK 中使用 MSE Ingress
文章图片

Ingress 实现现状
Ingress 实现目前从社区上有 Nginx 和 Envoy 两个体系,Nginx 存量大,但是由于架构设计的问题,随着用户规模变大逐步暴露安全和稳定性风险,目前社区宣布停止6个月新需求开发, 集中解决安全和稳定性问题;Envoy + Istio 作为后起之秀,采用数据面和控制面分离架构,有更好的安全和稳定性保障,并且支持多语言扩展,热更新优势,Envoy 社区也推出 Gateway 产品加速 Gateway API 落地。
java|如何在 ACK 中使用 MSE Ingress
文章图片

Ingress 实现趋势
从 Ingress 实现趋势上看,虽然 Nginx 依然保持最大市场份额,但是可以看到 Envoy 以最快的速度成为第二选型,相信在未来几年 Nginx 和 Envoy 会平分天下。
java|如何在 ACK 中使用 MSE Ingress
文章图片

Ingress 产品趋势
从行业上看,网关呈现高集成发展趋势,统一接入降低部署运维成本,降低请求链路 RT,因此在这个趋势之下阿里云推出 MSE Ingress(云原生网关)产品,将流量网关、微服务网关、安全网关三合一,提供一站式网关解决方案,兼容 Nginx 80%+扩展注解,并且面对未来支持 Gateway API 标准,基于 Ingress 增强微服务领域灰度、限流、观测等能力,提供安全和扩展优势。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 优势 MSE Ingress (云原生网关)孵化于阿里巴巴,于 2021 年完成商业化,提供功能丰富,高可用,高可用,安全、易扩展等核心竞争力,提供开箱即用的网关服务。
MSE Ingress 简介
MSE Ingress (云原生网关)将流量网关、微服务网关、安全网关三合一,结合微服务体系统一控制东西南北流量,集成 WAF 数据面,流量不过 WAF,降低整个链路 RT,提供更高性价比网关。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 功能优势
MSE Ingress 在安全、服务治理、可观测在阿里云上完成了开箱即用的高集成方案,并且提供了丰富的扩展机制,方便用户定制开发。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 可用性优势
MSE Ingress 在阿里巴巴经历双十一洪峰考验,经过两年多的发展,构建了强大的高可用体系,如推空保护和本地缓存,解决 K8s API-Server 等后端服务异常的保护策略,面对失败设计提升可用性,并且定期做故障演练不断锤炼,为用户在入口多一份稳定性保障!
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 性能优势
由于 MSE 采用 Envoy 内核,在 Ingress 场景下会比 Nginx 高 90%,很多人可能会有疑问,Nginx 本身性能是非常高的,但是适配 Ingress 场景的机制导致性能有所下降,最终做为 Ingress 场景表现不如 Envoy。对于网关性能非常大的消耗是证书卸载和压缩,目前 MSE Ingress 采用硬件加速将 HTTPS QPS 提升 86%,RT 下降 50%,未来我们将推出 gzip 硬件解压能力,进一步提升网关性能;由于我们在阿里有大规模生产经验,因此我们从 OS 内核到 Envoy 内核做了非常多的优化,性能又提升40%,因此采用 MSE Ingress 预计成本至少下降 50%,欢迎采用阿里云 PTS 压测感受 MSE Ingress 性能表现!
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingree 安全优势
Ingress 作为入口也是安全防线入口,MSE Ingress 提供了多重防护能力,从 入口 mTLS 双向认证,到后端 mTLS 双向认证,支持全链路保障,支持与阿里云盾证书集成,自动更新证书,防止证书过期风险。支持 JWT/OIDC 等标准登录认证机制,也提供自定义登录认证模式,可集成 IDaaS 支持支付宝、淘宝等三方认证机制,开箱即用。集成 Sentinel 支持服务级限流防护,集成 WAF 支持细粒度流量防护,提供数十种默认安全插件给用户选择,也支持用户自定义安全插件灵活扩展。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 扩展性优势
MSE Ingress 插件市场支持多语言扩展,采用 WASM 沙箱机制支持动态更新;采用 Envoy + Istio 开源架构无厂商锁定。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 协议优势
MSE Ingress 支持 HTTP-Dubbo 协议转换,在入口简单方便地提供协议转换,提升研发运维效率。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 兼容优势
MSE Ingress虽然采用 Envoy 内核,但是兼容了 Nginx Ingress 80%+以上核心注解,支持自建 Nginx Ingress 平衡迁移 MSE Ingress,未来 MSE Ingress 可以更好的往 Gateway API 演进。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 实践 通过上面 MSE Ingress 优势介绍大家可能已经决定选择 MSE Ingress了,但是使用 MSE Ingress 最佳实践是什么?如何平衡迁移呢?
MSE Ingress 最佳实践
MSE Ingress 在北向入口建立安全和高可用方向,路由到南向支持 K8s/Nacos/ECS/FC 多种服务发现模式,统一接入。东西向跨域互通,打通多个业务域,多个 Region,云上云下,云边,跨云,跨安全域互通;统一控制东西南北流量。东西向网关建议采用白名单机制降低安全风险。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 平滑迁移方案
由于 MSE Ingress 兼容 Ingress 标准,因此创建完 MSE Ingress 实例后可以自动的完成路由规则映射,因此只需要从 DNS/SLB 入口切换到 MSE Ingress 实例即可。
java|如何在 ACK 中使用 MSE Ingress
文章图片

java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 新金融客户案例——费芮互动
费芮互动的自媒体平台运维超过 3 亿粉丝,每日处理粉丝交互超过 1 亿次, 电子券系统发放 6 亿+ 张电子券,4 万+门店使用费芮移动支付解决方案,支付系统每月处理 3000 万+ 笔。如此大规模的业务流量对网关接入层的性能和稳定性提出较大的挑战。

  • 费芮的业务应用部署在阿里云容器服务 ACK 上,基于 Nginx 的 K8s Ingress 入口网关与业务应用混布在同一集群中,对于突发流量的应对以及横向扩缩容能力有限,同时海量 C 端用户发起的 HTTPS 请求会产生大量的 TLS 加解密操作,对服务器的 CPU 压力很大,从而影响业务系统的稳定性。
  • 费芮在容器化改造后仍有一些传统的单体应用,服务之间通过域名方式调用,无法统一使用 K8s service 进行统一管理。费芮急需高性能、高可用的网关接入层,能够对南北向和东西向的流量进行统一管理,同时希望能平滑迁移存量路由配置,减少网关替换的工作量。
MSE 云原生网关可以很好的解决以上难题:
  • MSE 可将 ACK 集群内服务一键导入与自动同步,并支持多个 ACK 集群复用同一个网关实例。
  • MSE 兼容 K8s Ingress 规范,且支持 Nginx Ingress 核心功能注解的无缝转换。通过 ack-mse-ingress-controller 组件,可自动监听、解析 K8s 集群中 Ingress 资源,将 ACK 中的 Ingress 路由直接同步至云原生网关中生效;
  • MSE 直连业务 Pod IP,不经过传统 Cluster IP,RT 更低;通过对 OS 内核参数与组件调优,QPS 比 Nginx 提升约 40%;利用硬件卸载 TLS 证书验证加速, HTTPS QPS 提升 80%。
  • MSE 的路由管理能力,既能实现南北向流量调度将服务对外暴露,也能支持东西向流量调度协助传统应用的服务间调用。丰富的负载均衡、限流降级、流量分发策略,可保证系统的稳定性,并满足业务快速迭代需求。
java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress DEMO
最后通过一个简单的 DEMO 简单介绍一下通过 MSE Ingress 做灰度,也可以通过云启免费试用。
java|如何在 ACK 中使用 MSE Ingress
文章图片

java|如何在 ACK 中使用 MSE Ingress
文章图片

MSE Ingress 云原生网关新老客户同享 9 折,欢迎试用,有问题欢迎扫描钉钉二维码 (34754806)和我们交流~
java|如何在 ACK 中使用 MSE Ingress
文章图片

【java|如何在 ACK 中使用 MSE Ingress】本文内容源自“5 分钟玩转容器服务进阶课程”的沉淀,点击此处,学习课程全部内容。

    推荐阅读