随着容器和 Kubernetes 技术的兴起,集群入口流量管理方式逐渐被 Ingress 通用化和标准化。入口网关的标准化制定将入口流量管理与网关的实现解耦,不仅促进了各种 Ingress Controller 的发展,而且消除了开发者存在的与厂商绑定的顾虑,日后也可以根据自身业务实际场景切换到不同 Ingress Controller。目前,越来越多的开发者开始关注并考虑将业务网关切换为 Ingress 网关,有的企业甚至已经落地了 Ingress 网关。
本文主要介绍 Ingress Controller 新选择——MSE Ingress 是什么,分享 MSE Ingress 最佳实践来帮助开发者从用 Ingress、到用好 Ingress。
什么是 Ingress
简单回顾一下之前我们在使用一些传统网关遇到的问题。
- 人力成本:常见的网关(Nginx、Spring Cloud Gateway、Zuul等)的路由配置以及策略配置格式均不同,开发者在选用网关之前需要熟悉对应网关的配置文件的使用方法,企业在招聘人员也要考虑是否具备所用网关的技术栈。
- 迁移成本:业务由于自身原因需要切换网关类型,开发者需要熟悉目标网关的配置文件,开发迁移工具,测试迁移工具的完整性,演练迁移方案,最终才能完成迁移。
在 Kubernetes 平台中,抽象、标准是第一要义。有了标准,才能更好适配各类不同实现的组件,才能不断蓬勃、可持续的发展。Kubernetes 通过统一抽象定义的 Ingress 资源来管理外部访问集群内部服务的方式,将入口网关的功能与实现解耦。
使用 Ingress 来管理集群入口流量有3大优势:
- 标准:遵循入口流量管理的标准形式,开发者只需熟悉 Ingress 配置即可,并且可以非常方便的切换业务网关的实现。
- 简单:Ingress 的定义格式简单,易于学习。通过简单配置 Host、Path 和目标服务即可快速完成集群内部服务的对外发布。
- 可扩展:Ingress 的标准定义仅仅包含了 HTTP 流量的路由匹配规则以及 HTTPS 流量所需的证书配置。开发者可以通过 Ingress Annotation 的形式进一步拓展 Ingress 的 API,实现流量分流、跨域、Header控制等治理策略。
Ingress 实现现状
Ingress 是抽象接口,具体的实现仍然由各类网关完成。目前,Ingress 的实现有两大阵营:Nginx 和 Envoy。Nginx 存量大,但是由于架构设计的问题,随着用户规模变大逐步暴露安全和稳定性风险,目前社区宣布停止 6 个月新需求开发, 集中解决安全和稳定性问题;Envoy + Istio 作为后起之秀,采用数据面和控制面分离架构,有更好的安全和稳定性保障,并且支持多语言扩展,热更新优势,Envoy 社区也推出 Gateway 产品加速 Gateway API 落地。
Ingress 实现趋势
从以下 CNCF 对 Ingress Provider 调研结果来看,虽然 Nginx 仍然处于 Ingress Provider 榜首,但增长速度已经放缓;Envoy 正在以最快的速度占据市场,越来越多的企业开始使用 En