Kubernetes 中的应用互联可能极其复杂,尤其是当您跨各种云环境(包括本地、公有云、私有云或混合云和多云)部署数百个甚至数千个容器时。NGINX 坚信,采用统一的方法来管理 Kubernetes 集群内外的应用互联,可帮助开发、基础架构、平台工程和安全防护团队大幅简化操作。
本文将回顾 NGINX 是如何打造出当今最受欢迎的 Ingress controller ,以及我们计划在未来如何继续提供一流的功能来管理 Kubernetes 应用互联。
首先,我们要强调客户至上的重要性。NGINX 始终坚持客户至上,我们研究每位客户的具体场景和使用案例、他们希望实现的目标及其在使用过程中可能遇到的挑战。然后我们会融合技术创新成果开发解决方案,帮助客户实现这些目标并以最高效的方式化解任何挑战。
Ingress Controller(Ingress 控制器)
2017 年,我们发布了首版 NGINX Ingress Controller,以满足企业级 Kubernetes 原生应用交付的需求。NGINX Ingress Controller 具有负载均衡、SSL 卸载、URI 重写、会话保持、JWT 身份验证及其他关键应用交付功能,可帮助改善用户体验。它基于全球最流行的数据平面 NGINX构建,并充分利用了 Kubernetes Ingress API。
鉴于其易于部署配置、资源利用率低(即使在高负载下)以及运行快速可靠的特点,NGINX Ingress Controller 一经发布便引发了广泛关注。
经过几次迭代,Kubernetes API 中 Ingress 对象的局限性日益显现,例如缺乏对 HTTP 以外协议的支持,以及无法附加自定义的请求处理策略(如安全防护策略)。鉴于上述局限性,我们引入了自定义资源定义(CRD),以增强 NGINX Ingress Controller 的功能并为客户提供高级用例。
NGINX Ingress Controller 提供了 CRD VirtualServer、VirtualServerRoute、TransportServer 和 Policy,可增强 API 网关、负载均衡器以及 Kubernetes 集群边缘 Ingress 功能的性能、弹性、正常运行时间、安全防护和可观测性。为了支持频繁的应用发布,这些 NGINX CRD 还支持跨多租户开发和运维团队的角色导向型自助治理。
在撰写本文时的最新版本(3.1 版)中,我们添加了 JWT 身份验证,并引入了 Deep Service Insight,以帮助客户监控 NGINX Ingress Controller 后台应用的状态。这有助于实现高级故障切换场景(例如从本地到云)。我们的产品路线图中还计划提供许多其他功能,敬请期待新版本。
请访问 NGINX Ingress Controller 网页,详细了解如何降低复杂性、延长正常运行时间以及更好地大规模监控应用健康状况和性能。
Service Mesh(服务网格)
2020 年,为了进一步提升 Kubernetes 应用互联能力,我们推出了 NGINX Service Mesh。这是一款专门构建的开发人员友好型、轻量级全面解决方案,支持 Kubernetes 集群内的各种 service 到 service 互联用例,包括安全防护和可见性。
NGINX Service Mesh 和 NGINX Ingress Controller 采用同一数据平面技术,可以紧密无缝地集成,从而实现集群内外的统一互联。
在最新版本(2.0 版)之前,NGINX Service Mesh 使用 SMI 规范和定制 API 服务器在 Kubernetes 集群内提供 service 到 service 互联。在 2.0 版中,我们决定弃用 SMI 资源,转而使用 GAMMA (Gateway API for Mesh Management and Administration) 资源。通过这种方法,我们可确保统一的南北向和东西向互联(利用相同的 CRD 类型),从而简化配置和运维。
NGINX Service Mesh 可从 GitHub 免费下载。
Gateway API
Gateway API 是一个开源项目,旨在改善和规范 Kubernetes 中的应用和服务网络。Gateway API 规范由 Kubernetes 社区管理,是由 Kubernetes Ingress API 演变而来,用于解决生产环境中 Ingress 资源的限制,包括为请求处理定义细粒度策略并跨多个团队和角色委托配置控制权。Gateway API 是一个令人振奋的项目。自其推出以来,NGINX 一直积极参与其中。
尽管如此,我们并不打算将 Gateway API 规范引入 NGINX Ingress Controller 中,因为后者已经拥有一套稳健的 CRD,涵盖了各种不同的用例,而且其中一些正是 Gateway API 打算解决的用例。
2021 年,我们决定分离出一个新项目 NGINX Kubernetes Gateway,该项目涵盖了使用 Gateway API 管理 Kubernetes 互联的方方面面。
出于以下原因,我们决定启动 NGINX Kubernetes Gateway 项目,而不仅仅是使用 NGINX Ingress Controller:
- 确保产品的稳定性、可靠性和生产就绪性(我们不想将测试级的规范引入已经成熟的企业级 Ingress controller 中)。
- 为 Gateway API 资源提供全面且不受厂商限制的配置互操作性,而不是将其与特定厂商的 CRD 捆绑在一起。
- 在架构选择和决策层面,尝试使用不同的数据平面和控制平面,目标是提供快速易用、安全可靠且面向未来的 Kubernetes 互联。
此外,Gateway API 还建立了 GAMMA 分支小组,来研究和定义适合 Service Mesh 用例的 Gateway API 规范的功能和资源。NGINX 在 Gateway API 中看到了统一南北向和东西向 Kubernetes 互联的长期发展前景,并正朝着这个方向迈进。
Gateway API 是跨厂商和跨项目合作的成果 — 依托于丰富的经验和专业的知识,并基于共同的信息实现集体决策。我们通力合作,为 Kubernetes 用户打造更出色的产品。
每个相关的技术实现总是有其创新所在,每种相关的数据平面也总有其发光的空间。通过 NGINX Kubernetes Gateway,我们将继续致力于 Gateway API 的原生 NGINX 实现。我们诚邀您一起加入,共同塑造 Kubernetes 应用互联的未来。
您可通过以下方式加入 NGINX Kubernetes Gateway 项目:
- 以贡献者的身份加入此项目
- 在实验环境试用 NGINX Kubernetes Gateway
- 执行测试并提供反馈
如欲加入该项目,请在 GitHub 访问 NGINX Kubernetes Gateway。
即使 Kubernetes Ingress API 不断演进,NGINX Ingress Controller 也将在可预见的未来延续发展。我们将继续投资和开发我们已经验证的成熟技术,以满足当前和未来的客户需求,并为需要在 Kubernetes 集群边缘管理应用互联的用户提供可靠的支持。
立即行动
如欲进一步了解如何利用 NGINX Kubernetes 解决方案简化应用交付,请访问 Kubernetes 互联套件网页。