跳到正文
Træfɪk

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


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

文档由 HeadFile Studio 翻译。

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