Ingress Controller 选型指南(第 3 部分):开源、默认与商业方案对比

NGINX | 2021年9月20日

编者:本文是一个由10篇文章组成的系列中的一篇:

  1. 借助生产级Kubernetes降低复杂性
  2. 如何通过高级流量管理提升Kubernetes的韧性
  3. 如何提高Kubernetes中的可观测性
  4. 使用流量管理工具保护Kubernetes的六种方法
  5. Ingress Controller选择指南(第1部分):明确需求
  6. Ingress Controller选择指南,第2部分:风险与面向未来的规划
  7. Ingress Controller 选择指南,第 3 部分:开源、默认与商业方案对比(本文)
  8. Ingress Controller选择指南,第4部分:NGINX Ingress Controller选项
  9. 如何选择服务网格
  10. 在动态Kubernetes云环境中对NGINX Ingress Controller进行性能测试

还可以免费下载包含全部博客文章的电子书《推动Kubernetes从测试走向生产》。

恭喜!阅读完选择Ingress控制器指南的前两部分后,您很快就可以做出选择了。下面回顾一下目前介绍的内容:

  • 在第 1 部分中,我们讨论了如何明确需求,包括性能、预算、用例、架构和所有权。
  • 在第 2 部分中,我们将讨论选择错误的Ingress控制器可能带来的风险,并概述可让您的选择适应未来需求的关键方面。

Ingress控制器分为三类:开源、默认和商业型。每一类都有各自的适用场景,因此在选择之前,务必要明确短期和长期需求。本文将介绍各类Ingress控制器的优缺点。

开源Ingress控制器

许多开源Ingress控制器由用户和志愿开发者社区维护,但也有一些由专门的工程团队负责。两款广受欢迎的开源Ingress控制器均基于NGINX:一款由Kubernetes社区维护,另一款由NGINX核心工程团队主导并开源。如需进一步比较基于NGINX的Ingress控制器,请参阅本系列的第4部分。

  • 优点:
    • 免费且由社区驱动:许多个人和组织选择开源项目,不仅因为它们免费,还因为他们更青睐由社区开发的技术。
    • 功能迭代速度:这些Ingress控制器更有可能率先采用创新功能。
  • 缺点(通常也是开源项目的共同缺点):
    • 成本(时间):它们缺少便于轻松设置和扩展的开箱即用工具,因此需要花时间根据具体需求进行定制并寻找变通方案。
    • 存在风险:稳定性、安全性和可靠性可能存在问题(因为项目注重功能快速迭代,且贡献者以志愿者为主)。常见漏洞和暴露(CVE)的补丁可能始终不会发布,也可能在CVE公开披露数月后才发布,让黑客有充足时间攻击Ingress控制器。
    • 支持很少或完全没有支持,大多数都需要“自行解决”……只能依靠自己和文档。如果遇到无法自行解决的问题,可能很难(甚至无法)获得帮助。几乎唯一的选择就是在社区论坛上发帖求助,然后寄希望于其他社区成员愿意回复并且知道解决方案。
  • 总结:组织刚开始尝试使用Kubernetes时,通常会选择开源Ingress控制器,因为这样更方便,或者文档声称可以免费快速启动并运行。在起步、测试或低流量生产环境中,这种方式通常很有效。

默认Ingress控制器

尽管许多默认Ingress控制器都基于开源技术,但我们仍将其单独归类,因为它们由提供完整Kubernetes平台(通常还提供平台管理支持)的公司开发和维护。此类别的示例包括公有云Ingress控制器、Rancher和Red Hat OpenShift路由器。

  • 优点:
    • 免费或成本较低:价格低廉是使用这些产品的一大吸引力。它们已集成到平台中,初次使用时可有效节省时间。
    • 可靠且有支持保障:由于由专门的工程团队维护,这些产品可能比社区维护的Ingress控制器更可靠。通常包含商业支持,也可付费获取。
  • 缺点:
    • 基础设施锁定:默认Ingress控制器无法独立于基础设施运行,因此无法将其或相关配置从一个云环境迁移到另一个云环境。这意味着每个部署环境都需要使用不同的Ingress控制器,导致工具数量激增、团队学习难度增加,也使Ingress控制器更难得到妥善保护。
    • 功能较为基础,通常缺少大规模部署所需的高级流量管理和安全功能。
    • 不可预测的成本(时间和资金):虽然初始成本为零或较低,但随着应用不断发展,成本可能会大幅增加,且难以预测。例如,Ingress控制器的基础功能集可能无法满足需求,您需要投入时间在应用中构建缺失的功能;而且每次更新应用时,都必须对这些功能进行回归测试。某些默认工具还有另一个缺点:随着应用日益普及,起初看似不高的吞吐量费用可能导致云账单大幅增加。
  • 总结:对于刚开始使用Kubernetes,并采用Amazon Elastic Kubernetes Service(EKS)、Google Kubernetes Engine(GKE)、Microsoft Azure Kubernetes Service(AKS)、Rancher以及Red Hat OpenShift Container Platform等托管平台的团队,默认Ingress控制器是一种常见选择。随着应用日趋成熟、团队不断壮大,组织通常会选择在技术栈中添加企业级Ingress控制器,而不是替换默认工具。

商业版Ingress控制器

这些Ingress控制器是许可产品,旨在支持大规模生产环境部署。其中一个示例是基于NGINX Plus的F5 NGINX Ingress Controller版本,我们将在第4部分进一步介绍。

  • 优点:
    • 丰富的功能集:商用Ingress控制器提供丰富的功能集,可支持高级流量管理,并满足大规模部署的扩展需求。还可能与其他生产级产品集成,例如WAF或服务网格。
    • 可扩展:这些选项通常具备更多无需定制或变通即可使用的“开箱即用”功能,因此往往能帮助组织节省时间。它们可以轻松添加到自动化管道中,使基础设施能够按需扩展。
    • 可靠且有支持保障:商业产品的一大优势是稳定可靠,即每个版本发布时都经过全面测试,并根据需要定期提供软件更新和安全补丁。全面的商业支持通常分为多个级别,因此遇到严重问题时,往往可在几分钟或几小时内获得保密协助。
  • 缺点:
    • 开发速度较慢:由于稳定性对商业Ingress控制器至关重要,其功能迭代速度可能略慢于开源Ingress控制器。
    • 成本(资金):商业产品需要付费,这是客观现实。对于开发资源充足但资金有限的组织,在这种情况改变之前,成本可能成为决定其放弃采用的关键因素。
  • 总结:随着组织规模扩大,团队和应用越复杂,Ingress控制器的选择就越重要。当组织达到较高的复杂程度时,采用商业Ingress控制器更为合理,因为它有助于降低管理复杂性,并加快新产品功能的上市速度。

下一步:评估可选方案

在这一阶段,可以先排除无法满足需求的选项,从而筛选出一些Ingress控制器进行试用。开展高级功能比较时,可以从learnk8s入手。该网站提供了免费比较表,涵盖其评估过的Ingress控制器。

在研究Ingress控制器时,您可能会注意到,许多选项都基于NGINX。要全面了解基于NGINX的选项,请参阅本系列即将发布的最后一篇博客:《Ingress控制器选择指南》第4部分:NGINX Ingress控制器选项。


分享

关于作者

相关博客文章

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内容缓存方式的技巧。