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 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。