NGINX Ingress Controller 2.0版:需要了解的信息

NGINX | 2021年12月27日

10月,我们发布了F5 NGINX Ingress Controller 2.0版(nginxinc/kubernetes-ingress),新增了对Kubernetes 1.22和Ingress API版本1(networking.k8s.io/v1)的支持。您可能会想:这有什么意义?

这个“那又怎样”的问题并非三言两语就能说清。我们将通过回答以下3个相互关联的问题来作答:

继续阅读以了解答案,并于2022年1月11日收看“Kubernetes版本来袭时的应对方案”。

为什么Kubernetes版本发布如此重要?

这个问题的答案看似简单,实则复杂。Kubernetes的兼容性管理颇具挑战,因为Kubernetes运维人员必须管理三类版本:

  1. Kubernetes平台本身:每次发布新版本时,Kubernetes团队都会停止维护一个较旧版本。继续使用此类版本会给风险管理策略带来问题,也会增加故障排除的难度,因为无法再获得Kubernetes团队的帮助。目前,Kubernetes项目维护最近3个次要版本(1.20、1.21和1.22)的发布分支。Kubernetes 1.19及更高版本可获得约1年的补丁支持,而1.18及更低版本获得的补丁支持约为9个月。(1.18及更低版本的支持期较短,是因为Kubernetes过去每年发布4次,而目前每年发布3次。)
  2. Kubernetes API:每次发布Kubernetes新版本时,都会推出新的API并弃用过时的API,而API变更会影响相应的资源和工具。升级Kubernetes平台时,可能还需要升级API。
  3. 在Kubernetes中部署的工具:Kubernetes或其API的重大变更可能会影响相关工具(例如Ingress控制器)及对应资源能否继续正常运行。

因此,需要跟踪三条时间线,分别对应Kubernetes、Ingress API和NGINX Ingress Controller。为避免Kubernetes出现故障,必须找到一个合适的组合,确保Kubernetes版本与API和NGINX Ingress Controller兼容。如果未检查兼容性就升级其中任何一个组件,可能会造成严重后果。如果这三个组件彼此不兼容……恭喜,您的应用已无法正常运行!

什么是Ingress API?为什么networking.k8s.io/v1很重要?

Ingress API使Ingress控制器能够安全地公开Kubernetes应用。networking.k8s.io/v1 API(又称Ingress API v1)随Kubernetes 1.19引入。当时,Kubernetes同时支持v1beta1和v1,并会自动将其中一个版本呈现为另一个版本。这种API版本的底层兼容机制有助于简化运维,但可能会妨碍规划工作。

随着Kubernetes 1.22发布,v1成为Ingress API的唯一版本。这一点非常重要,因为Ingress API v1成为唯一版本后,所有Beta版本(extensions/v1beta1和networking.k8s.io/v1beta1)均被弃用。对于尚未采用Ingress API v1的组织而言,这会造成影响,但NGINX认为这一变化是积极信号。Ingress API结束Beta阶段,表明它已发展为成熟且功能完备的API。那么,这一变化为何重要?这仍与版本管理有关。假设将现有集群升级到Kubernetes 1.22,却继续使用v1beta1的Ingress相关资源……结果就是Ingress资源无法正常工作!

NGINX Ingress Controller 2.0 对现有客户有何影响?

由于NGINX Ingress Controller与Ingress API紧密耦合,v1的发布对我们的产品以及客户都产生了重大影响,因此我们将NGINX Ingress Controller的版本号从1.x直接升级到2.x。我们重新设计了NGINX Ingress Controller 2.0的架构,以利用Ingress API v1,使其与Kubernetes 1.22完全兼容。

如果使用NGINX Ingress Controller,需要立即根据版本采取相应措施,以免导致Kubernetes、Ingress资源或NGINX Ingress Controller无法正常运行:

  • Kubernetes 1.18及更早版本:
    • 请确保使用 NGINX Ingress Controller 1.12,以便充分利用其提供的功能。(升级到 NGINX Ingress Controller 2.0 时,还需要升级到 Kubernetes 1.19 或更高版本。)
    • 制定计划,在未来几个月内迁移到较新版本的Kubernetes(以及NGINX Ingress Controller),因为下一个Kubernetes版本发布后将不再支持Kubernetes 1.18。
  • Kubernetes 1.19–1.21:
    • 升级到NGINX Ingress Controller 2.0。
    • 如果尚未将Ingress相关资源迁移到networking.k8s.io/v1(请参阅NGINX Ingress Controller 2.0发行说明),请立即制定迁移计划。Kubernetes 1.19–1.21支持Ingress API当前的所有版本(包括v1beta1和v1),因此可以进行原地转换。
    • 如果尚未迁移,请立即将Ingress和IngressClass资源迁移到networking.k8s.io/v1。
      • 如果Ingress资源中使用了已弃用的“kubernetes.io/ingress.class”注解,建议改用“ingressClassName”字段。
      • 使用我们的文档和示例(适用于networking.k8s.io/v1以及Ingress资源的ingressClassName字段)来规划更新。
  • Kubernetes 1.22:
    • 请确保已运行NGINX Ingress Controller 2.0,因为旧版NGINX Ingress Controller与Kubernetes 1.22不兼容,也不支持Ingress API v1。

NGINX Ingress Controller 的一段(不算简短的)历史

自2016年首次发布以来,NGINX Ingress Controller已从一款初具雏形的工具发展为Kubernetes网络领域的强大解决方案。下面回顾其从发布至今的发展历程。

2016(v0.5.0)

NGINX工程师Michael Pleshakov在我们的GitHub仓库(nginxinc/kubernetes-ingress)中发布了首个条目,使NGINX和F5 NGINX Plus可用作Kubernetes Ingress控制器(KIC)。

NGINX Ingress Controller在KubeCon EU 2016上首次公开亮相。观看录像:第1天:使用NGINX为Kubernetes创建高级负载均衡解决方案;KubeCon EU 2016。

2017(v1.0.0)

该项目已达到生产就绪状态,其中基于NGINX Plus的版本提供了对JSON Web令牌(JWT)的关键支持。

在NGINX Conf 2017上,Michael Pleshakov在《使用NGINX Plus作为Ingress Controller为Kubernetes上的应用提供负载均衡》中演示了包括高级负载均衡在内的生产环境功能。

2018

NGINX Ingress Controller在可见性、易用性和灵活性方面实现了显著增强:

在NGINX Conf 2018大会上,Michael Pleshakov登台发表演讲《使用NGINX作为Kubernetes Ingress Controller》,分享如何使用Helm部署NGINX Ingress Controller、配置HTTP和TCP/UDP负载均衡、使用Prometheus进行监控,以及排查问题。

2019

我们推出了标准Kubernetes Ingress资源的替代方案,让高级功能的实现更轻松、更可靠。

在《新一代NGINX Ingress Controller》中,Michael Pleshakov再次登上NGINX Conf 2019,演示VS/VSR在蓝绿部署和A/B测试等用例中的应用。

2020

除了对NGINX Ingress资源进行多项增强外,今年的重点是与生态系统工具和NGINX产品集成。

在《使用NGINX和OpenShift保护生产环境应用》中,技术营销工程师Amir Rawdat演示了如何使用NGINX Ingress Operator、利用基于角色的访问控制(RBAC)实现跨职能配置、使用NGINX App Protect保护容器化应用,以及使用JWT验证客户端。

2021

安全是主要主题之一,同时还将实现更多生态系统集成。

在NGINX Sprint 2.0会议演讲中,软件工程师Aidan Carson以“利用端到端加密掌控微服务”为主题,演示了如何使用NGINX Ingress Controller保护边缘、使用NGINX Service Mesh在服务之间设置安全访问控制,以及如何结合使用这两款产品,通过mTLS保护出站流量。

下一步:试用 NGINX Ingress Controller

如果您已确定开源Ingress控制器适合您的应用,可以通过我们基于NGINX Open Source构建的NGINX Ingress Controller快速开始使用:GitHub代码仓库。

对于大规模生产环境部署,建议试用基于NGINX Plus的商业版NGINX Ingress Controller。该产品提供30天免费试用,其中包括NGINX App Protect。


分享
标签: 2021, Tech

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。