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

相關文章
相關標籤/搜索