Traefik 2.0 tcp 路由试用
对于tcp 的路由是基于sni (需要tls)但是可以通过统配(*) 解决不试用tls的,当然也可以让Traefik 自动生成tls 证书
以下是测试http 以及mysql 的tcp 路由配置(demo 很简单,就是一个proxy)
环境准备
- docker-compose文件
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
- traefik 配置
[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]
- dockerfile
FROM traefik:v2.0
COPY traefik.toml /traefik.toml
- 说明
tcp 路由配置需要sni,对于没有tls 证书的我们可以使用* 配置,比如mysql的
labels:
- "traefik.tcp.routers.mysql2.rule=HostSNI(`*`)"
- "traefik.tcp.routers.mysql2.entrypoints=mysql-default2"
启动 &&测试
- 启动
docker-compose build
docker-compose up -d
- 效果
整体界面
http 路由
tcp 路由
- http 测试
配置hosts 文件
访问效果
- tcp 路由测试
直接使用端口+ ip 方式
database1
mysql -uroot -pdalongrong -h127.0.0.1
效果:
database2
mysql -uroot -P3307 -pdalongrong -h127.0.0.1
- prometheus metrics
说明
以上是一个简单的测试,主要是 需要sni 支持,但是sni 需要tls,实际我们的连接也需要少有改动,可能四层用haproxy 会更方便点,对于简单,同时数量不多的
四层处理还是挺不错的
参考资料
https://docs.traefik.io/routing/routers/#configuring-tcp-routers
https://blog.containo.us/back-to-traefik-2-0-2f9aa17be305
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2018-09-19 stardog graphql 简单操作
2014-09-19 规则引擎
2014-09-19 RBAC (基于角色的访问控制)
2014-09-19 访问控制