對於tcp 的路由是基於sni (須要tls)可是能夠經過統配(*) 解決不試用tls的,固然也能夠讓Traefik 自動生成tls 證書
如下是測試http 以及mysql 的tcp 路由配置(demo 很簡單,就是一個proxy)mysql
version: '3'
services:
database:
image: mysql:5.7.16
labels:
- "traefik.tcp.routers.mysql.rule=HostSNI(`*`)"
- "traefik.tcp.routers.mysql.entrypoints=mysql-default"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: dalongrong
MYSQL_DATABASE: gogs
MYSQL_USER: gogs
MYSQL_PASSWORD: dalongrong
TZ: Asia/Shanghai
database2:
image: mysql:5.7.16
labels:
- "traefik.tcp.routers.mysql2.rule=HostSNI(`*`)"
- "traefik.tcp.routers.mysql2.entrypoints=mysql-default2"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: dalongrong
MYSQL_DATABASE: app
MYSQL_USER: app
MYSQL_PASSWORD: dalongrong
TZ: Asia/Shanghai
nginx:
image: nginx
labels:
- "traefik.http.routers.nginx.rule=Host(`dalong.web.localhost`)"
- "traefik.http.routers.nginx.entrypoints=web"
reverse-proxy:
image: traefik:v2.0
build: ./
entrypoint: traefik --configfile /traefik.toml
ports:
- "80:80"
- "8090:8080"
- "3306:3306"
- "3307:3307"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
[global]
checkNewVersion = false
sendAnonymousUsage = false
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.mysql-default]
address = ":3306"
[entryPoints.mysql-default2]
address = ":3307"
[entryPoints.web-nginx]
address = ":443"
[entryPoints.traefik]
address = ":8080"
[log]
level = "DEBUG"
[api]
insecure = true
dashboard = true
[ping]
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = true
[metrics]
[metrics.prometheus]
FROM traefik:v2.0
COPY traefik.toml /traefik.toml
labels:
- "traefik.tcp.routers.mysql2.rule=HostSNI(`*`)"
- "traefik.tcp.routers.mysql2.entrypoints=mysql-default2"
docker-compose build
docker-compose up -d
總體界面 nginx
http 路由 web
tcp 路由 sql
database2
mysql -uroot -P3307 -pdalongrong -h127.0.0.1docker
以上是一個簡單的測試,主要是 須要sni 支持,可是sni 須要tls,實際咱們的鏈接也須要少有改動,可能四層用haproxy 會更方便點,對於簡單,同時數量很少的
四層處理仍是挺不錯的api
https://docs.traefik.io/routing/routers/#configuring-tcp-routers
https://blog.containo.us/back-to-traefik-2-0-2f9aa17be305app