编者:本文是一个共10篇的系列文章之一:
- 借助生产级Kubernetes降低复杂性
- 如何通过高级流量管理提升Kubernetes的韧性
- 如何提高Kubernetes中的可观测性
- 使用流量管理工具保护Kubernetes的六种方法
- Ingress Controller选择指南(第1部分):明确需求
- Ingress Controller 选型指南,第 2 部分:风险与面向未来的规划
- Ingress Controller选择指南,第3部分:开源、默认与商业方案对比
- Ingress Controller 选择指南,第4部分:NGINX Ingress Controller 选项(本文)
- 如何选择服务网格
- 动态Kubernetes云环境中的NGINX Ingress Controller性能测试
还可以免费下载包含全套博客文章的电子书《推动Kubernetes从测试走向生产》。
根据云原生计算基金会(CNCF)的《2020 年调查》,NGINX是KubernetesIngress控制器中最常用的数据平面。但您是否知道,“NGINX Ingress Controller”并不只有一种?
本博客的早期版本发布于2018年,标题为等等,我使用的是哪个适用于Kubernetes的NGINX Ingress Controller?。当时,我们与一位社区成员讨论了两款使用NGINX的热门Ingress Controller,随后便撰写了这篇博客。

不难理解为什么过去会(现在仍会)有人混淆。两种Ingress控制器都:
- 都称为“NGINX Ingress Controller”
- 开源
- 托管在GitHub上,仓库名称非常相似
- 大约同时启动的项目所产生的结果
当然,它们最大的共同点是实现了相同的功能。
NGINX 与 Kubernetes 社区 Ingress Controller 对比
为便于理解,我们对这两个版本作如下区分:
- 社区版本:可在GitHub的kubernetes/ingress-nginx代码库中找到。社区版Ingress控制器基于NGINX Open Source构建,相关文档位于Kubernetes.io。该版本由Kubernetes社区维护。
- NGINX版本,可在GitHub上的nginxinc/kubernetes-ingress代码库中找到。NGINX Ingress Controller由F5 NGINX开发和维护,相关文档位于docs.nginx.com。该控制器提供两个版本:
- 基于NGINX Open Source(免费开源选项)
- 基于NGINX Plus(商业选项)
此外,还有许多其他基于NGINX的Ingress控制器,例如Kong。好在它们的名称很容易区分。如果不确定正在使用哪种NGINX Ingress Controller,请检查当前运行的Ingress控制器所使用的容器镜像,然后将Docker镜像名称与上面列出的代码仓库进行比较。
NGINX Ingress Controller 的目标和优先事项
NGINX Ingress Controller与社区版Ingress控制器(以及基于NGINX Open Source的其他Ingress控制器)之间的一个主要区别在于开发和部署模式,而这些模式又取决于各自不同的目标和优先事项。
- 开发理念:所有NGINX项目和产品的首要目标,是提供快速、轻量且长期稳定一致的工具。我们会尽一切努力避免不同版本之间出现行为变化,尤其是会破坏向后兼容性的变化,确保升级过程符合预期。我们也重视选择的灵活性,因此所有解决方案均可部署在任何平台上,包括裸机、容器、虚拟机,以及公有云、私有云和混合云。
- 集成式代码库:NGINX Ingress Controller使用完全纯净的NGINX Open Source或NGINX Plus实例进行负载均衡,并且仅使用NGINX原生功能来应用最佳实践配置。它不依赖任何未经我们互操作性测试的第三方模块或Lua代码。我们的Ingress Controller并非由大量第三方代码仓库拼装而成;负载均衡器(NGINX和NGINX Plus)及Ingress Controller软件(Go应用程序)均由我们自行开发和维护。我们是Ingress Controller所有组件的唯一负责方。
- 高级流量管理:标准Kubernetes Ingress资源的一项局限是,必须使用注解、ConfigMap和自定义模板等辅助功能,才能为其配置高级功能。NGINX Ingress Resources提供原生、类型安全且采用缩进格式的配置方式,可简化Ingress负载均衡功能的实施,包括TCP/UDP、熔断、A/B测试、蓝绿部署、标头操作、双向TLS身份验证(mTLS)和Web应用防火墙(WAF)。
- 持续满足生产就绪要求,每个版本均按照可支持的生产标准构建和维护。无论使用基于NGINX Open Source的版本还是基于NGINX Plus的版本,都能同样受益于这种“企业级”理念。NGINX Open Source用户可以在GitHub上向我们的工程团队提问并获得解答,而NGINX Plus订阅用户则可获得高品质支持。无论选择哪种版本,都如同DevOps团队中有一位NGINX开发人员!
NGINX Open Source 与 NGINX Plus 对比:为何升级到商业版?
接下来,我们来了解一下基于NGINX Plus的NGINX Ingress Controller可带来的一些主要优势。正如我们在《如何选择Kubernetes Ingress Controller,第3部分:开源、默认与商业版本对比》中所述,开源Ingress Controller与商业Ingress Controller之间存在显著差异。如果您计划在生产环境中大规模部署Kubernetes并运行复杂应用,商业Ingress Controller可在一些关键方面帮助您节省时间和成本。
安全与合规
许多组织无法在生产环境中交付Kubernetes应用,其中一个主要原因是难以确保应用的安全性和合规性。基于NGINX Plus的NGINX Ingress Controller支持五个关键用例,有助于保护应用和客户的安全。

- 保护边缘:在架构合理的Kubernetes部署中,Ingress控制器是流向Kubernetes内运行服务的数据平面流量的唯一入口,因此非常适合部署Web应用防火墙(WAF)。NGINX App Protect与NGINX Ingress Controller<.htmla>集成,可保护Kubernetes应用免受OWASP十大风险及许多其他漏洞的影响,确保符合PCI DSS要求,并且性能优于ModSecurity。
- 集中管理身份验证和授权:可以在入口点使用基于OAuth 2.0框架构建的OpenID Connect(OIDC)和JSON Web Token(JWT)身份验证,实现身份验证和单点登录(SSO)层。
- 实施端到端加密。需要保护服务间流量时,通常会考虑使用服务网格。永久免费提供的NGINX Service Mesh可与NGINX Ingress Controller无缝集成,让您能够高效控制入站和出站mTLS流量,并且延迟低于其他服务网格。
- 及时主动获取补丁通知:报告CVE后,订阅用户会主动收到通知并快速获得补丁。他们可以立即应用补丁以降低漏洞被利用的风险,无需持续关注GitHub上的更新,也不必等待数周(甚至数月)才能获得补丁。
- 符合FIPS要求:可以启用FIPS模式,确保与NGINX Plus通信的客户端使用由可信实现提供的强加密算法。
了解德国汽车巨头奥迪如何保护其Red Hat OpenShift应用,详见《奥迪借助NGINX为技术愿景和应用创新构筑未来保障》。
应用性能与韧性
对于开发人员和平台运维团队而言,正常运行时间和应用速度通常是关键绩效指标(KPI)。基于NGINX Plus的NGINX Ingress Controller支持五种用例,帮助您充分发挥Kubernetes的价值。

- 获取实时监控:NGINX Plus仪表板可显示数百项关键负载和性能指标,帮助您快速排查应用运行缓慢(或停机)的原因。
- 更快检测并解决故障,通过主动运行状况检查实施断路器,主动监控TCP和UDP上游服务器的运行状况。
- 无需重启即可重新配置,更快速、无中断的重新配置可确保应用交付始终保持稳定的性能和资源使用率,并且延迟更低,优于开源替代方案。
- 全面测试新功能和部署,利用键值存储更改百分比,无需重新加载,让A/B测试和蓝绿部署更易于执行。
- 快速解决支持需求:对于无法等待社区答疑或不能承担敏感数据泄露风险的组织,保密的商业支持至关重要。NGINX提供多个级别的支持服务,可满足不同需求,涵盖安装、部署、调试和错误修正方面的协助。即使只是感觉某些地方“不太对劲”,也可以获得帮助。
了解商务短信公司Zipwhip如何为其SaaS应用实现99.99%的正常运行时间,详见《使用NGINX增强Amazon EKS的安全性和流量可见性》。
下一步:试用 NGINX Ingress Controller
如果您已确定开源Ingress控制器适合您的应用,可以前往我们的GitHub代码仓库快速开始。
对于大规模生产环境部署,建议试用基于NGINX Plus的商业版Ingress控制器。可享受30天免费试用,其中包括NGINX App Protect。
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
