Traefik 2.0 tcp 路由試用

對於tcp 的路由是基於sni (須要tls)可是能夠經過統配(*) 解決不試用tls的,固然也能夠讓Traefik 自動生成tls 證書
如下是測試http 以及mysql 的tcp 路由配置(demo 很簡單,就是一個proxy)mysql

環境準備

  • 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
  • 效果

總體界面
nginx

 

 


http 路由
web

 

 


tcp 路由
sql

 

 

  • http 測試
    配置hosts 文件
    訪問效果

 

 

  • tcp 路由測試
    直接使用端口+ ip 方式
    database1
    mysql -uroot -pdalongrong -h127.0.0.1
    效果:

 

 


database2
mysql -uroot -P3307 -pdalongrong -h127.0.0.1docker

 

 

  • prometheus metrics

 

 

說明

以上是一個簡單的測試,主要是 須要sni 支持,可是sni 須要tls,實際咱們的鏈接也須要少有改動,可能四層用haproxy 會更方便點,對於簡單,同時數量很少的
四層處理仍是挺不錯的api

參考資料

https://docs.traefik.io/routing/routers/#configuring-tcp-routers
https://blog.containo.us/back-to-traefik-2-0-2f9aa17be305app

相關文章
相關標籤/搜索