Router
TCP 路由器¶
TCP 路由器负责将传入的 TCP 连接交给能够处理它们的服务。TCP 路由器根据规则分析传入连接,找到匹配项后,通过所有已配置的中间件将连接转发到对应服务。
TCP 与 HTTP 路由
如果 HTTP 路由器和 TCP 路由器监听同一个入口点,将优先应用 TCP 路由器。如果 TCP 路由器没有找到匹配路由,则由 HTTP 路由器接手。
配置示例¶
tcp:
routers:
my-tcp-router:
entryPoints:
- "tcp-ep"
- "websecure"
rule: "HostSNI(`example.com`)"
priority: 10
middlewares:
- "tcp-ipallowlist"
tls:
passthrough: false
certResolver: "letsencrypt"
options: "modern-tls"
domains:
- main: "example.com"
sans:
- "www.example.com"
service: my-tcp-service[tcp.routers]
[tcp.routers.my-tcp-router]
entryPoints = ["tcp-ep", "websecure"]
rule = "HostSNI(`example.com`)"
priority = 10
middlewares = ["tcp-ipallowlist"]
service = "my-tcp-service"
[tcp.routers.my-tcp-router.tls]
passthrough = false
certResolver = "letsencrypt"
options = "modern-tls"
[[tcp.routers.my-tcp-router.tls.domains]]
main = "example.com"
sans = ["www.example.com"]labels:
- "traefik.tcp.routers.my-tcp-router.entrypoints=tcp-ep,websecure"
- "traefik.tcp.routers.my-tcp-router.rule=HostSNI(`example.com`)"
- "traefik.tcp.routers.my-tcp-router.priority=10"
- "traefik.tcp.routers.my-tcp-router.middlewares=tcp-ipallowlist"
- "traefik.tcp.routers.my-tcp-router.tls.certresolver=letsencrypt"
- "traefik.tcp.routers.my-tcp-router.tls.passthrough=false"
- "traefik.tcp.routers.my-tcp-router.tls.options=modern-tls"
- "traefik.tcp.routers.my-tcp-router.tls.domains[0].main=example.com"
- "traefik.tcp.routers.my-tcp-router.tls.domains[0].sans=www.example.com"
- "traefik.tcp.routers.my-tcp-router.service=my-tcp-service"{
"Tags": [
"traefik.tcp.routers.my-tcp-router.entrypoints=tcp-ep,websecure",
"traefik.tcp.routers.my-tcp-router.rule=HostSNI(`example.com`)",
"traefik.tcp.routers.my-tcp-router.priority=10",
"traefik.tcp.routers.my-tcp-router.middlewares=tcp-ipallowlist",
"traefik.tcp.routers.my-tcp-router.tls.certresolver=letsencrypt",
"traefik.tcp.routers.my-tcp-router.tls.passthrough=false",
"traefik.tcp.routers.my-tcp-router.tls.options=modern-tls",
"traefik.tcp.routers.my-tcp-router.tls.domains[0].main=example.com",
"traefik.tcp.routers.my-tcp-router.tls.domains[0].sans=www.example.com",
"traefik.tcp.routers.my-tcp-router.service=my-tcp-service"
]
}配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
entryPoints |
路由器附加到的入口点列表。如果未指定,TCP 路由器会附加到所有 TCP 入口点。 | 所有 TCP 入口点 | 否 |
rule |
规则是一组配置了取值的匹配器,用于判断特定连接是否满足指定条件。规则成立时,路由器激活、调用中间件,然后将连接转发到服务。详见规则与优先级。 | 是 | |
ruleSyntax |
已弃用。指定 rule 字段使用的语法,以支持 v2→v3 迁移。新配置中不要使用此字段;应将路由器规则改写为 v3 语法。 |
否 | |
priority |
为避免规则重叠,路由默认按规则长度降序排列。优先级直接等于规则长度,因此最长规则具有最高优先级。优先级值为 0 时会被忽略。支持负值。详见规则与优先级。 |
规则长度 | 否 |
middlewares |
应用到路由器的中间件列表。中间件按声明顺序应用。可用 TCP 中间件见 TCP 中间件概览。 | 否 | |
tls |
路由器的 TLS 配置。指定此配置后,路由器只处理 TLS 连接。详细的 TLS 选项见 TLS 配置。 | 否 | |
service |
处理匹配连接的服务名称。服务可以是负载均衡服务或加权轮询服务。详见 TCP 服务。 | 是 |
路由器命名¶
- 路由器名称中不允许使用字符
@ - 路由器名称应具有描述性,并遵循你的命名约定
- 在特定提供者的配置(Docker、Kubernetes)中,路由器名称通常根据服务名称和规则自动生成
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。