一个容器的自动化社区应用成长历程
1 从零到标准的十年历史
10年前,也就是2015年9月22日,经过数月的研究和实践,有人在论坛上发布了一个链接,介绍了其之前一直在做的一个名叫Traefik的小项目。
说实话,当时其人只是希望它能帮助一些开发者解决他们自己遇到的容器路由难题。
然后,事情很快就升级了……
2 早期:微服务的狂野生长
说实话,对于任何想管理微服务的人来说,2015 年都有点混乱。Docker 容器被大肆宣传,Kubernetes 仍然令人望而生畏,需要博士学位才能设置,每个人都像 2005 年一样手动编辑 NGINX 配置。
问题很简单:传统的负载均衡器无法理解现代平台的动态基础设施。你的服务不断地来来往往、不断扩展和收缩,而你可怜的反向代理却完全不知道背后发生了什么。
该应用想法同样简单:如果反向代理能够自动解决问题呢?如果它能够监控你的容器、理解你的服务并进行自我配置呢?
或者换句话说,如果可以将路由配置委托给应用程序级别呢?在如今拥有成百上千个服务的世界中,每个服务都应该附带自己的入口属性。
说实话,这个反响让人很惊讶。Traefik 发布不到一周,就登上了 GitHub 热门项目榜单,项目负责人发现自己忙得不可开交,忙着回复来自世界各地开发者的 issue 和 pull request。
回想起来,当时根本没想到它会变成今天这个样子。当时只是想解决自己遇到的一个实际问题,或许还以为其他一些微服务开发者可能也面临着同样的问题。Traefik 最终会成为如今平台中如此关键的一部分,这在当时看来似乎不太可能。
但 10 年过去了,一些数字仍然让我惊叹不已:
Docker Hub 下载量达 34 亿次
GitHub 上超过 56,000 颗星
5,000+ 个合并的拉取请求
6,000 多个问题(我们意外地创建了世界上最持久的待办事项列表)
来自世界各地的近 900 名贡献者
500+ 个版本(我们一直……富有成效)
26 种作为代号(实际上是最重要的指标)
16名维护者
1家公司成立
3 成熟过程
过去十年,Traefik 经历了数个重要的里程碑,每个里程碑都标志着云原生革命的一项关键创新。每一次重大发布都不仅仅是一次升级,更是对行业发展方向的回应,通常恰逢开发者意识到他们真正需要这些功能之时。
Traefik v1从当时看来具有革命性的基本原理开始:
自动服务发现(不再需要手动配置更新)
Let's Encrypt 集成(因为 HTTPS 应该很容易)
支持 Docker、Kubernetes、Marathon 和其他编排器
实时配置重新加载(还记得必须重新启动一切吗?)
Traefik v2是面向未来架构的一项重大努力:
使用路由器、中间件和服务进行彻底的重新设计
TCP 和 UDP 支持(不仅仅是 HTTP)
合适的 Kubernetes CRD
用于复杂流量处理的中间件链
说实话,从 v1 到 v2 的迁移过程并非最顺利。项目经历了许多艰难的历程,才学到了很多关于向后兼容性的知识。
Traefik v3专注于现代标准和更顺畅的升级:
网关 API 支持(Kubernetes Ingress 的未来)
OpenTelemetry 集成(可观察性的未来)
更加温和的迁移体验(社区吸取了教训)
回顾过去,云原生行业本身在这十年中显然经历了根本性的转变。最初是一个纯粹的创新和创造阶段——每个人都在尝试容器、编排器和新的架构模式——现在已经成熟,进入了一个生产力时代。疯狂的实验阶段基本上已经结束;现在的关键在于如何让这些技术可靠、安全,并易于大规模运营。
Traefik 的演变反映了这一行业转型,从解决前沿问题转变为提供团队真正信赖的稳定、生产就绪的基础设施。Traefik 始终致力于定义云原生基础设施的样貌。项目不仅适应了生产力时代,还帮助创建了使其成为可能的工具和模式。
4 下一步
十年来,该应用一直致力于推动云原生革命,但从未放慢脚步。行业已进入生产力时代,但这并不意味着创新的停止——项目只是更加专注于解决平台团队每天面临的实际运营挑战。
社区已经非常清楚他们希望我们下一步去哪里,老实说,接下来的步骤感觉就像是一直在构建的东西的自然演变。
现在来谈谈 Kubernetes 中一个亟待解决的问题:
ingress-nginx 处于维护模式。
它没有新功能,只有关键修复,而且越来越多的安全问题让平台团队夜不能寐。
这不仅仅是又一次弃用公告——这是一个根本性的转变,将影响每个在生产环境中运行 Kubernetes 的团队。驱动众多集群的控制器即将进入其最终阶段,各地的平台团队都在问同一个问题:“现在怎么办?”
该项目预见到了这一点,并决定采取一些切实可行的措施。Traefik 3.5 包含一个全新的 NGINX 提供程序,它可以理解 NGINX Ingress 注解。这意味着无需重写任何清单即可从 ingress-nginx 迁移到 Traefik。
没有大规模的重构项目,没有让每个人都紧张的周末迁移。
已使用的代码可以保留现有的注释、现有的工作流程和现有的睡眠时间表。您将获得一个维护更积极的入口控制器,该控制器专为实际生活的云原生世界而设计。额外福利是:得益于 Traefik 的灵活性,还可以使用同一控制器规划以后的网关 API 迁移。
社区的贡献,使其更加完善。如果有人正在从 NGINX Ingress 迁移,并遇到了尚未涵盖的极端情况,或者您对改进兼容层有任何想法,他们乐意倾听。
迁移路径简洁明了,安全态势稳固,未来路线图清晰明了。有时,最好的创新就是让显而易见的选择变得更容易做出。
5 版本进化
- v3.6:更强大,更多功能
3.6 版本正在逐步解决我们社区所要求的一些复杂路由场景。
多层路由可能是最重要的架构改进。目前,Traefik 遵循一条简单的路径:
入口点 → 路由器 → 服务 → 服务器。
3.6 版本将允许路由器将请求转发到其他路由器,而不仅仅是服务,从而为复杂的用例创建路由树。
不妨这样想:您可以拥有一个专门用于身份验证和授权的第一层路由器,然后将经过身份验证的请求转发到第二层,第二层会根据用户的权限或角色进行路由。
这样就无需再将所有内容塞进一个路由决策中,也无需再进行奇怪的环回攻击——您可以构建真正符合应用程序工作方式的复杂流量管理。
KNative集成(感谢我们的社区贡献者)将使 Traefik 成为无服务器 Kubernetes 环境中的一等公民,从而可以更轻松地从单个入口控制器将流量路由到传统微服务和无服务器功能。
- v4:完美陈年
Traefik v4 采用了不同的方法。 并没有采用传统的“大爆炸”式重大版本发布,而是尝试了一些更智能的方案。
所有 v4 版本中的新功能实际上都会首先在 v3.x 的小版本中实现。NGINX 支持、多层路由、KNative、增强的 Gateway API 支持——您可以趁着它们还新鲜的时候使用它们,而不必等待数年才能发布主要版本。
同时, v4将提前弃用一些遗留功能,让大家有充足的时间逐步迁移。到 v4 正式发布时,它基本上是最新 v3.x 的精简版——包含所有您已经在使用的现代功能,并去除了那些希望您已经迁移的弃用功能。
您将能够在新功能可用时采用它们,按照自己的节奏迁移已弃用的功能,并且当 v4 最终发布时,升级应该更像是例行更新而不是一项重大任务。
这种方法应该会使 v4 的迁移比之前的主要版本更加顺畅。有时,快速推进的最佳方式是循序渐进。
6 小结
真正让人惊叹的是:合并到 Traefik 的所有 Pull Request 中,超过一半来自非核心团队的贡献者。社区不仅仅是使用 Traefik,他们还在不断改进、扩展它,并将其带向从未想象过的方向。
该开源产品见证了来自数十个国家的开发者的贡献,他们解决了核心团队甚至不知道存在的问题。
日本的开发者修复了巴西开发者发现的漏洞。德国的开发者为加州团队所需的协议添加了支持。法国的技术文档撰写人改进了文档,帮助澳大利亚的团队更快地上手。
印度的安全研究员报告了一个保护全球用户的漏洞。即使是从未编写过一行代码的用户提出的功能请求和漏洞报告,也能帮助我们了解需求。
每一种贡献——代码、文档、测试、问题报告、改进建议——都能提升整体用户体验。这就是开源的精髓所在。
社区编写了疯狂的提供程序(你好KNative ),为人们从未考虑过的用例创建了很棒的插件(👋 Sablier),使论坛成为一个如此受欢迎的空间(❤️ bluepuma77),并且总体上使 Traefik 比仅有核心团队时更有用。
为了庆祝这一非凡的里程碑,开源项目甚至将推出一项特别活动。接下来 50 位贡献者,只要他们的拉取请求被合并到Traefik 代码库,即可获得一件限量版 Traefik 十周年纪念 T 恤。这可不是普通的 T 恤——是独家周年纪念设计,以及足以让同事羡慕不已的极客风范。
设计本身就很特别(见下文)。由于 Traefik 的每个版本都带有一个“奶酪”代号,我们设计了一件 T 恤,上面印着过去十年来所有出现在开源版本中的“奶酪”。
十年前,仅仅是作者有一个让反向代理更智能的简单想法。如今,Traefik 已成为数百万用户使用的现代应用程序的基础设施的一部分。如今,整个团队和开发者社区仍在持续改进,这个已成为重要开源项目的项目。
云原生生态系统将持续演进,人工智能革命正在重塑我们的基础设施,新的挑战和机遇层出不穷,开发者也将继续创造精彩的成果。只要有流量需要路由,有服务需要连接,该项目就会一直在这里——或许还会推出一些您从未意识到自己需要的新功能。
感谢那些让人们保持警惕、提醒互联网依然是互联网的喷子们。感谢把这个小项目打造成了引以为豪的项目。
- 点赞
- 收藏
- 关注作者
评论(0)