Hello folks,我是 Luga,今天我们来聊一下云原生生态中的网关技术 - 由 Traefik Labs 开发的开源项目 Traefik Proxy,一个诞生于 8 年前、在社区的帮助下已成为现代云原生基础设施堆栈的重要组成部分。
一、Traefik 发展历程简要回顾
时光荏苒,白驹过隙 ...
距离 Traefik 上一个主要版本 v2.0 发布,已经过去了近五年。在这五年里,Traefik 以其强大的功能、灵活的配置和易用的特性,赢得了全球开发者的青睐,成为了业界领先的反向代理和负载均衡器之一。
对于 Traefik 的发展历程,我们可以通过如下几个数字来进行概要性总结:
- 超过 30 亿次下载量: Traefik 的受欢迎程度可见一斑。
- 超过 700 名贡献者: 庞大的社区为 Traefik 的不断发展提供了强劲动力。
- DockerHub 排名前 15: Traefik 在开发者社区中拥有广泛的影响力。
- 46,000 个 GitHub star: Traefik 的代码质量和受欢迎程度得到了高度认可。
- 连续五年蝉联 API 网关排名第一: Traefik 在 API 网关领域的地位无可撼动。
二、Traefik Proxy v3.0 RC1 里程碑特性概括
在此版本(v3.0 RC1)中,主要围绕几个关键方面进行了增强性设计。
首先,增加了对流行的新兴技术的支持及优化——WebAssembly (Wasm)、OpenTelemetry 以及 Kubernetes Gateway API。这些技术的引入为用户提供了更广泛的选择和更高的灵活性。
同时,基于 Proxy 的核心基石——“路由”和“安全性”等特性,对路由规则的一些关键部分进行修改,旨在提供更强大、更可靠的路由功能,使用户能够更好地管理和控制流量的流向。
此外,还添加了对一些前沿技术的支持,如 HTTP/3、SPIFFE 和 Tailscale。通过支持 HTTP/3,我们提升了性能和效率,使用户能够更快地传输数据。SPIFFE 技术的引入增强了安全性,为用户提供了更可靠的身份验证和授权机制。而 Tailscale 技术的支持则使用户能够更方便地建立安全的网络连接,实现跨网络的通信。
三、Traefik Proxy v3.0 RC1 里程碑特性解析
1. 引入 WebAssembly 支持:扩展性和灵活性再升级
早在 2019 年,随着 Traefik v2 的发布,引入了扩展引擎 Yaegi,使得能够为其上下文开发中间件(或提供程序)。
作为一个极其强大的解释器引擎,Yaegi 边界俨然已超越了 Traefik 本身。但考虑到其性质,Yaegi 仍然需要做很多工作来支持完整的 Go 规范并跟上该语言的每个版本,此种场景下,会导致添加极具挑战性的功能变得困难。
Traefik v3.0 RC1 中添加了对 WebAssembly (Wasm) 技术的支持。WebAssembly 是一种低级的、可执行的二进制格式,可以在多种环境中运行,包括浏览器和服务器。Traefik 通过 WebAssembly 支持,可以在 WebAssembly 环境中执行更多的功能,例如扩展 Traefik 的功能或实现新的插件。这一支持将使 Traefik 更加灵活和可扩展。
Traefik 对 Wasm 的支持包括以下功能:
(1) 将 Wasm 模块作为路由器
Wasm 模块可以用来定义路由规则,并根据请求将流量路由到不同的服务。通过这种方式,用户可以根据自定义的逻辑和需求,灵活地控制流量的分发和路由。
# 使用 Wasm 模块定义路由规则
routers:
wasm:
# Wasm 模块的路径
module: /path/to/wasm/module.wasm
# Wasm 模块的导出函数
function: router
# 将流量路由到不同的服务
services:
service1:
# 匹配 /path/to/service1 的请求
path: /path/to/service1
service2:
# 匹配 /path/to/service2 的请求
path: /path/to/service2
(2) 将 Wasm 模块作为中间件
Wasm 模块可以用来处理请求和响应,并在它们之间进行转换。这样的灵活性允许用户在请求和响应的处理过程中插入自定义逻辑,以满足特定的需求。用户可以根据自己的业务逻辑,对请求和响应进行修改、过滤或增强。
# 使用 Wasm 模块处理请求和响应
middlewares:
wasm:
# Wasm 模块的路径
module: /path/to/wasm/module.wasm
# Wasm 模块的导出函数
function: middleware
# 在所有路由之前应用中间件
http:
middlewares:
- wasm
# 定义路由
routers:
default:
# 匹配所有请求
path: /
# 将流量路由到不同的服务
services:
service1:
# 匹配 /path/to/service1 的请求
path: /path/to/service1
service2:
# 匹配 /path/to/service2 的请求
path: /path/to/service2
(3) 支持多种 Wasm 运行时
Traefik 支持多种 Wasm 运行时,包括 Wasmtime 和 Lucet。这意味着用户可以根据自己的偏好和需求选择适合的 Wasm 运行时。这种灵活性使得 Traefik 可以与不同的运行时环境无缝集成,提供更广泛的选择和更好的兼容性。
2. 拥抱 OpenTelemetry,迈向更强大的观测
作为现代应用架构的核心组件,Traefik 从 v1 版本开始就将可观测性作为其中的核心功能之一,并支持多种供应商的指标和追踪分析。随着 OpenTelemetry 的出现,Traefik 积极拥抱这一新兴标准,为用户提供更强大的监控能力,并提供平滑迁移的路径。
在 Metrics 方面,Traefik 已经广泛支持并应用于多个供应商,比如 Datadog、Prometheus 等。现在,加入 OpenTelemetry 使得用户有更多选择,根据自身需求选择最合适的工具,并在迁移到 OpenTelemetry 的过程中保持现有的监控工具链的完整性。
在 Traces 方面,Traefik 曾经是 OpenSensus 和 OpenTracing 两个标准的早期支持者。随着这两个标准的合并,Traefik 也紧跟潮流,放弃对旧标准的支持,全力支持 OpenTelemetry。这一举措不仅简化了 Traefik 的代码,还为用户提供了更统一、更强大的追踪体验。
除了拥抱 OpenTelemetry 之外,Traefik v3 在可观测性方面还进行了其他改进,例如:
- 新增对gRPC健康检查的支持:满足gRPC应用场景的需求,提供更全面的监控能力。
- 优化指标的收集和处理:提高效率,降低资源消耗。
- 提供更丰富的可观测性数据:帮助用户更深入地了解应用的运行状况。
Traefik 不仅仅是一个功能强大的应用架构组件,而且在可观测性方面持续改进和拥抱新的标准,为用户提供了更好的监控和追踪能力。这些改进使得用户能够更好地理解和管理其应用程序的性能和运行状态。
3. 路由与安全再升级:构建更加可靠、安全的应用
Traefik 的基本目的之一是以安全且智能的方式路由网络流量,这是代理服务器的核心功能之一。而 Traefik v3 版本通过引入大量新功能和改进,进一步巩固了其在这方面的领先地位,给用户带来了令人满意的体验。
让我们从互联网的基础协议 HTTP 开始谈起。自 2015 年 HTTP/2 获得批准以来,Traefik 团队一直在努力定义下一个里程碑:HTTP/3。在实现这一目标方面,Traefik 进行了大量的工作。HTTP/3 是一个重要的协议,它不再依赖于旧的 TCP 协议,而是基于 QUIC(一种由 Google 在 2012 年开发的新传输协议)使用 UDP。HTTP/3 带来了许多优势,如性能增强、连接建立更快、加密更简单等。现在,Traefik 已经完成了对 HTTP/3 的实验,准备将其投入生产使用。
另一个在云原生环境中广泛使用的关键技术是 gRPC。gRPC 是一种现代的远程过程调用(RPC)框架,可以在各种环境中运行。它使用 Protocol Buffers 作为接口描述语言,并提供双向流和流控制、取消和超时等高级功能。Traefik v3 现在支持 gRPC-Web,这使得从浏览器中的 Web 应用程序调用 gRPC 服务成为可能。
在生产环境中部署数十甚至数百个服务会带来许多挑战之一是确保工作负载能够相互信任并证明其身份。为解决这个问题,SPIFFE(Secure Production Identity Framework For Everyone)是一个安全的生产身份框架项目,它定义了一套框架和标准,用于识别和保护应用程序服务之间的通信。
Traefik 不仅在网络流量路由方面保持着领先地位,而且通过引入新功能和支持关键技术,如 HTTP/3、gRPC-Web 和 SPIFFE,不断推动着现代应用架构的发展。这些改进和创新使 Traefik 成为一个强大而全面的工具,满足用户在安全、智能和可靠性方面的需求。
4. 增强 Kubernetes 支持:助力 DevOps 释放更多潜能
对于使用 Kubernetes 的组织来说,Traefik 一直是首选的入口控制器。 借助 IngressRoutes,用户可以摆脱旧版 Ingress 规范的限制,从而享受声明式路由等诸多优势。
随着 Kubernetes 的不断发展,Traefik 积极参与 Gateway API 的开发,并率先支持其 alpha 版本。 现在,网关 API 规范已经正式发布,Traefik 也为用户提供了完整支持。
# 定义 Gateway
apiVersion: networking.k8s.io/v1
kind: Gateway
metadata:
name: traefik-gateway
spec:
listeners:
- name: http
protocol: HTTP
port: 80
hosts:
- "*"
# 定义 HTTPRoute
apiVersion: networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: traefik-route
spec:
host: "www.example.com"
rules:
- http:
paths:
- path: /
backend:
serviceName: service1
servicePort: 80
# 定义 Service
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
selector:
app: service1
ports:
- name: http
protocol: TCP
port: 80
Traefik 深知 Kubernetes 生态系统的强大力量,并始终致力于与各供应商合作,为用户提供最佳的工具选择。 在 Traefik v3 中,我们进一步加强了与 Hashicorp Consul 和 Nomad 的集成,以满足用户和客户的普遍需求:
- Consul: 针对需要特殊 TLS 管理的网格,Traefik v3 增强了对 Consul 的支持,帮助用户更轻松地构建安全可靠的微服务架构。
- Nomad: Traefik v3 现在支持 Nomad 的命名空间,使用户能够更细粒度地控制流量路由,并满足不同应用的需求。
此外,Traefik v3 还为 Kubernetes 用户带来了以下增强功能:
- 简化配置: 使用 Gateway API 资源可以统一管理所有路由和负载均衡配置,简化了 Kubernetes 集群中的流量管理。
- 提高性能: Traefik 可以利用 Gateway API 资源进行更有效的负载均衡,提升流量处理效率。
- 增强安全性: Traefik 可以与 Gateway API 结合,提供更强的安全控制,例如身份验证、授权和 TLS 加密等。
以上为关于 Traefik Proxy v3.0 RC1 内容解读,更多信息可参考官方项目介绍,若大家感兴趣的话。
Reference :
- [1] https://traefik.io/blog/announcing-traefik-proxy-v3-rc
- [2] https://github.com/traefik/traefik/releases/tag/v3.0.0-rc1?ref=traefik.io