文章转载自:https://mp.weixin.qq.com/s/nMMN7hAJK6SFn1V1YyxvHA
下面是一个简单的示例配置 - 使用最新支持的 YAML 文件格式,将请求路由到一个数据库上面去:
tcp:
routers:
to-database:
entrypoints:
- database-entrypoint
rule: HostSNI(`*`)
service: database-service
services:
database-service:
loadBalancer:
servers:
- address: xx.xx.xx.xx:xx
上面这个配置示例表示每个以 database-entrypoint 结尾的请求都将被路由到 database-service 这个服务上去。
此外通过 TLS,Traefik 还可以根据 SNI 来路由 TCP 请求。在下面示例中,Traefik 就将根据 SNI 将请求路由到两个数据库:
tcp:
routers:
to-db-1:
entrypoints:
- web-secure
rule: "HostSNI(`db1.domain`)"
service: "db1"
tls: {}
to-db-2:
entrypoints:
- web-secure
rule: "HostSNI(`db2.domain`)"
service: "db2"
tls: {}
另外 Traefik 还是支持 HTTP 和 TCP 在同一个端口上,如果你希望获得相同的入口的同时获取 HTTP 和 TCP 请求,那么 Traefik 可以很完美的来处理它。
tcp:
routers:
to-db-1:
entrypoints:
- web-secure
rule: "HostSNI(`db1.domain`)"
service: "db-1"
tls: {}
http:
routers:
to-db1-dashboard:
entrypoints:
- web-secure
rule: "Host(`dashboard.db1.domain`)"
service: "db1-dashboard"
tls: {}
上面这个示例中, dashboard.db1.domain 上的 HTTP 请求将路由到数据库的 Dashboard 服务上,而上面的 db1.domain 上的 TCP 请求将路由到数据库上面去。