跳到正文
Træfɪk

Rules & Priority

路由器负责将传入请求交给能够处理它们的服务。

与 TCP 类似,UDP 工作在传输层,没有请求的概念, 因此也不存在可用于匹配传入 UDP 数据包的 URL 路径前缀。 另外,目前对多主机的 TLS 支持还不完善, 因此也没有可用于匹配的 Host SNI 概念。 所以不存在可作为规则来匹配传入数据包并据此路由的条件。 因此,目前 UDP 路由器 基本上只是某种形式的负载均衡器。

提示

UDP 路由器只能以 UDP 服务为目标(不能指向 HTTP 或 TCP 服务)。

会话与超时

尽管 UDP 无连接(也正因为如此), Traefik 的 UDP 路由器实现依赖我们(以及另外一些实现)所称的 session。 这意味着要保存客户端与后端之间正在进行的通信的部分状态, 特别是让代理知道应将后端响应数据包转发到哪里。

如预期一样,每个会话都关联一个 timeout, 当不活动时间超过给定时长后,便会清理该会话。

可以使用 entryPoints.name.udp.timeout 选项配置超时,详见入口点。

入口点

如果未指定,UDP 路由器会接受来自所有已定义(UDP)入口点的数据包。要将路由器作用范围限制到一组入口点,请设置 entryPoints 选项。

配置示例

监听所有入口点

udp:
  routers:
    Router-1:
      # By default, routers listen to all UDP entrypoints
      # i.e. "other", and "streaming".
      service: "service-1"
[udp.routers]
  [udp.routers.Router-1]
    # By default, routers listen to all UDP entrypoints,
    # i.e. "other", and "streaming".
    service = "service-1"
labels:
  - "traefik.udp.routers.Router-1.service=service-1"
{
  //...
  "Tags": [
    "traefik.udp.routers.Router-1.service=service-1"
  ]
}

监听指定入口点

udp:
  routers:
    Router-1:
      # does not listen on "other" entry point
      entryPoints:
        - "streaming"
      service: "service-1"
[udp.routers]
  [udp.routers.Router-1]
    # does not listen on "other" entry point
    entryPoints = ["streaming"]
    service = "service-1"
labels:
  - "traefik.udp.routers.Router-1.entryPoints=streaming"
  - "traefik.udp.routers.Router-1.service=service-1"
{
  //...
  "Tags": [
    "traefik.udp.routers.Router-1.entryPoints=streaming",
    "traefik.udp.routers.Router-1.service=service-1"
  ]
}

服务

每个 UDP 路由器必须且只能引用一个 UDP 服务。 服务是路由器的目标。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。

为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证