一文读懂 Traefik Proxy 3.1 新版本特性

云计算 云原生
今天我们来聊一下云原生生态相关技术 - 用于构建融合网关,集流量、安全及业务于一体的 Traefik。

众所周知,Traefik v3.0 的发布标志着这款知名的云原生入口控制器迈入了全新的里程碑。为我们带来了令人振奋的重大更新,其中包括对 WASM、Open Telemetry 和 Kubernetes Gateway API 的支持等关键新功能。这些创新性的加入不仅彰显了 Traefik 在技术领域的引领地位,更为用户带来了前所未有的便利和性能提升。

关于 Traefik 3.x 发展点滴的一些思考

自从 Traefik 诞生以来,一直以其卓越的性能、灵活的配置和紧密的云原生集成而备受推崇。作为领先的开源入口控制器和反向代理,Traefik 已成为无数企业和组织实现云原生转型的可靠利器。

而最新推出的 Traefik 3.x 版本,则标志着这款优秀软件开启了全新的发展历程,为用户带来了一系列激动人心的创新和增强。

回顾 Traefik 3.0 的发布,我们不难发现它所引入的诸多关键新功能正是 Traefik 与时俱进、紧跟技术潮流的充分体现。其中,对 WebAssembly(WASM) 的支持无疑是最引人注目的一项创新。凭借 WASM,Traefik 能够可以在运行时动态加载各种中间件,从而实现功能的无缝扩展,大幅提升了系统的灵活性和可扩展性。这一独特的能力不仅为开发人员带来了前所未有的自由,更为企业级应用程序的部署和管理开放了全新的大门。

与此同时,Traefik 3.0 对 OpenTelemetry 的支持也让系统的可观测性得到了极大增强。作为一种新兴的云原生观测标准,OpenTelemetry 使 Traefik 能够以统一且厂商无关的方式收集和导出跟踪数据、指标和日志,从而让用户更轻松地监控和故障排查复杂的分布式系统。这一优势无疑将进一步提升 Traefik 在企业级环境中的应用价值。

最后,Traefik 3.0 对 Kubernetes Gateway API 的支持则彻底消除了它在 Kubernetes 生态系统中的"外来者"身份,使之成为集群中与生俱来的一员。凭借 Gateway API,Traefik 现在可以作为标准的 Kubernetes 资源进行管理和配置,从而实现了与集群的无缝集成。这一里程碑式的进步不仅简化了 Traefik 在 Kubernetes 环境中的部署和使用,更重要的是,它为 Traefik 在云原生生态系统中扮演更加核心的角色奠定了基础。

而就在 Traefik 3.0 的热度未曾消退之时,Traefik 3.1 版本的到来则让这款云原生网关的实力再上新台阶。3.1 版本进一步增强了 WASM 和网关 API 的集成能力,其中尤为值得一提的是,随着网关 API 将很快成为 Kubernetes 集群中公开资源的新标准,Traefik 3.1 的 Kubernetes 网关 API 已做好充分准备,可安全无虞地在生产环境中使用。这无疑是一个振奋人心的好消息,标志着 Traefik 在云原生网关的征程上又迈出了坚实的一步。

举例来说,Traefik 与服务网格的结合将为微服务应用程序带来前所未有的灵活性、可观测性和控制能力。而在边缘计算场景下,Traefik 则可以作为关键的网关组件,实现对分布于全球各地的边缘节点的统一管理和流量控制。

因此,我们可以毫不避讳地说,凭借其出众的性能、创新的功能和与云原生生态的深度融合,Traefik 正在成为越来越多企业实现数字化转型的首选利器。

关于 Traefik 3.1 核心特性简要解析

作为规范的早期支持者,Traefik 从一开始就扮演着 GatewayController 的重要角色,为规范的制定和发展做出了宝贵的贡献。

如今,备受瞩目的 Traefik v3.1 版本正式面世,不仅全面满足了 Gateway API 规范的核心要求,更是超越了这些基本标准,为用户带来了更加出色的体验。正如 Kubernetes SIG 网络团队的一致性测试报告所显示:Traefik 在遵从 Gateway API 规范的同时,还提供了更多增值功能和优化,展现出了作为领先云原生网关的非凡实力。

这一喜人的成果标志着,Traefik 的 Gateway API 提供商现已做好充分的准备,可以安全无虞地在生产环境中使用了。对于那些渴望在 Kubernetes 集群中采用标准化网关资源的企业和组织而言,Traefik 无疑是最值得信赖的选择。

1.状态管理改进

在现代云原生架构中,“状态管理”无疑是网关 API 的核心组成部分。它使我们能够实时监控基础设施的运行状况,确保 GatewayAPI 对象可以随时准备就绪,高效地管理流量。对于 Traefik 这款领先的云原生网关而言,提供出色的状态管理能力是其保持竞争力的关键所在。

在最新发布的 Traefik v3.1 版本中,通过紧密遵循 GatewayAPI 规范,Traefik 现在可以为用户提供对象的真实生产状态监控,从而确保网关的可靠性和可用性。不论是 Gateway、GatewayClass、HTTPRoute 还是其他关键对象,Traefik 都能够准确计算和反映它们的实时状态,让用户可以一览无余地掌握整个系统的运行情况。

除了核心的状态监控能力,Traefik v3.1 在状态管理方面还提供了更多增值功能。例如,用户现在可以根据需求自定义状态计算逻辑,让监控结果与实际业务场景更加贴合。此外,Traefik 还支持将状态信息导出到各种监控和可观测性系统,实现与现有基础设施的无缝集成。

2.路由优先级更新

我们都知道,长期以来,Traefik 一直采用基于规则长度的路由优先级机制,旨在有效防止路由重叠的发生。该机制的运作原理是,路径越长的规则通常将拥有更高的优先级,从而确保请求能够被正确地路由至最精确的目的地。

然而,随着 Kubernetes Gateway API 规范的推出,Traefik 面临了全新的挑战。该规范为路由优先级制定了自己的一套规则,与 Traefik 原有机制存在一定差异。面对这一情况,在最新发布的 v3.1 版本中彻底更新了 HTTPRoutes 的优先级计算方式。

在以往,当用户需要在不同的 Kubernetes 发行版或 GatewayController 之间进行切换时,往往需要重新配置和调整路由匹配系统,以适应各自的优先级规则。这无疑增加了运维的复杂度,也给系统的可移植性带来了一定阻碍。

然而,凭借 Traefik v3.1 对规范的贯彻落实,这一痛点将彻底消除。现在,无论用户是从其他 GatewayController 切换到 Traefik,还是在不同的 Kubernetes 发行版之间进行迁移,路由匹配系统都可以保持完全一致,无需进行任何调整或重新配置。这一独特的优势不仅极大地简化了运维流程,更为用户的系统带来了无与伦比的可移植性和灵活性。


---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
  namespace: default
spec:
  gatewayClassName: traefik
  listeners:
  - hostname: example.com
    port: 80
    protocol: HTTP
    routes:
      kind: HTTPRoute
      namespaceSelector:
        matchLabels:
          app: web
      middleware:
        namespace: default
        path: /middlewares

---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: web-route
  namespace: default
  labels:
    app: web
spec:
  parentRefs:
  - kind: Gateway
    name: my-gateway
    namespace: default
  hostnames:
  - "example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    forwardTo:
    - serviceName: web-service
      port: 80

---
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: default
  labels:
    app: web
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 8080

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
  namespace: default
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx
        ports:
        - containerPort: 8080

通过这个配置,我们可以看到 Traefik 如何与 Gateway API 资源集成。所有对 example.com 的 HTTP 请求都将被路由到 web-service,并最终由 web-deployment 处理。

值得注意的是,在此示例中,我们利用了 HTTPRoute 的 parentRefs 字段来指定所属的 Gateway。这是 Gateway API 规范提供的标准方式,用于将路由与特定网关相关联。

3.ReferenceGrant

在云原生架构中,跨命名空间引用一直是一个棘手的问题。为了解决这一难题,Traefik 曾通过自定义的 IngressRoute 对象,引入了一个特殊选项来允许跨命名空间引用。尽管这种方式在一定程度上满足了用户需求,但潜在的安全隐患依然存在,使得它不够完美。

在 Traefik v3.1 最新版本中,借助 ReferenceGrant,我们可以在 Traefik 中声明一个网关,该网关能够访问存储在其他命名空间中的 TLS 证书等敏感资源。同时,还也可以轻松地定义 HTTPRoute 对象,将流量路由到不同命名空间中的服务。这一全新的功能不仅消除了过去的安全隐患,更极大地简化了跨命名空间引用的配置过程。

除了安全性和易用性的提升,ReferenceGrant 还为多租户环境带来了前所未有的灵活性。借助这一功能,我们可以轻松地在不同的命名空间中隔离租户,同时仍然允许它们共享某些公共资源和服务。这种模式不仅有利于资源利用率的提高,更能够满足复杂的业务需求,为企业带来更大的价值。


# HTTRoute in the default namespace.
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: whoami-http
  namespace: default
spec:
  parentRefs:
    - name: traefik
      kind: Gateway
  rules:
     - backendRefs:
        - name: whoami
          namespace: whoami
          port: 80

# ReferenceGrant and Service in the whoami namespace.
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
  name: whoami
  namespace: whoami
spec:
  from:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      namespace: default
  to:
    - group: ""
      kind: Service
      name: whoami

---
apiVersion: v1
kind: Service
metadata:
  name: whoami
  namespace: whoami
spec:
  selector:
    app: whoami
  ports:
    - port: 80

作为云原生时代的核心基础设施,Kubernetes Gateway API 规范为网关控制器提供了统一的标准化接口,确保了不同供应商之间的互操作性和兼容性。然而,仅满足规范所需的核心功能是远远不够的。为了真正释放网关的全部潜能,并满足日益增长的业务需求,规范还为 GatewayController 预留了可选的扩展功能,以供供应商根据自身产品特点进行创新和拓展。

作为行业领先的云原生网关,Traefik 在 v3.1 版本中紧跟潮流,为用户带来了一系列创新的扩展功能,进一步夯实了其在 Kubernetes 生态系统中的领导地位。

其中,最引人注目的当属 HTTPURLRewriteFilter 和 HTTPRouteRedirect 两大功能。HTTPURLRewriteFilter 让我们可以根据需求灵活地重写 HTTP 请求的 URL,实现更精细化的流量控制和路由。无论是为了简化 URL 结构、隐藏内部实现细节,还是实现端点迁移或负载均衡,这一强大的功能都可以发挥关键作用。

与之相呼应的是 HTTPRouteRedirect 功能,赋予了 Traefik 重定向 HTTP 请求的能力。通过灵活的配置,我们可以根据各种条件(如路径、主机名、请求方法等)来决定是否重定向,并指定重定向的目标 URL。这不仅有助于优化用户体验,还可以用于实现安全策略、流量迁移等多种场景。

除了上述两大亮点,Traefik v3.1 还为 HTTPRoute 对象带来了对请求方法和查询参数匹配的支持。这意味着,我们现在可以根据 HTTP 请求的方法(如 GET、POST 等)以及查询参数来定义更精准的路由规则,进一步提高了流量控制的灵活性和准确性。

当然,除了 Gateway API 特性外,在 Traefik v3.1 中针对 WebAssembly(WASM) 的支持也进行了优化与改进。通过优化 WebAssembly 的支持,Traefik v3.1 现在允许用户使用 WASM 编写自定义中间件。这些中间件可以直接部署在 Traefik 实例中,从而实现对 HTTP 请求和响应的细粒度处理和转换。

想象一下,我们可以使用 WASM 来实现复杂的请求路由逻辑、内容转码、安全检查,甚至负载均衡等高级功能。由于 WebAssembly 的高性能和安全沙箱特性,这些自定义中间件将能够以极高的效率和隔离性运行,从而确保网关的稳定性和可靠性。

这些创新功能的推出,再次彰显了 Traefik 对用户需求的高度重视,以及对技术创新的不懈追求。凭借出色的规范遵从性和领先的扩展能力,Traefik 必将为用户带来前所未有的网关体验,助力企业高枕无忧地驰骋于云端之上。

Reference :

  • [1] https://traefik.io/blog/announcing-traefik-proxy-v3-1/
  • [2] https://github.com/traefik/traefik/releases/tag/v3.1.0?ref=traefik.io
责任编辑:赵宁宁 来源: 架构驿站
相关推荐

2024-02-19 08:04:58

网关云原生

2024-05-24 10:29:46

2017-05-04 20:29:12

HTTP服务器TCP

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智领云

2018-09-28 14:06:25

前端缓存后端

2022-09-22 09:00:46

CSS单位

2022-11-06 21:14:02

数据驱动架构数据

2010-06-01 09:52:27

jQuery Tool

2022-10-20 08:01:23

2022-07-26 00:00:03

语言模型人工智能

2023-05-20 17:58:31

低代码软件

2022-07-05 06:30:54

云网络网络云原生

2021-12-29 18:00:19

无损网络网络通信网络

2023-11-27 17:35:48

ComponentWeb外层

2022-12-01 17:23:45

2022-07-20 11:47:18

数据

2021-09-09 11:00:15

微软Windows 10Windows

2024-01-03 08:54:17

Kubernetes策略工具

2021-05-18 09:48:58

前端开发架构
点赞
收藏

51CTO技术栈公众号