对于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

Traefik 2.0 tcp 路由试用的更多相关文章

  1. Traefik 2.0 暴露 Redis(TCP) 服务

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484452&idx=1&sn=0a17b907 ...

  2. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  3. Traefik 2.0 发布了

    Traefik 2.0 发布了,包含了很多不错的行特性 tcp 路由(同时也支持sni 路由) 参考配置 tcp: routers: to-db-1: entrypoints: - web-secur ...

  4. Traefik 2.0 实现灰度发布

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484478&idx=1&sn=238390dc ...

  5. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  6. TCP路由网络通信

    路由器 实现跨网段通信   路由器的工作原理是基于路由器中的路由表来实现数据包的路径选择 当路由器收到一个数据包的时候,会读取数据包的目标IP地址,根据目标IP地址来匹配路由表中的规则 单个路由器不会 ...

  7. Asp.Net MVC2.0 Url 路由入门---实例篇 【转】

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  8. 配置子目录Web.config使其消除继承,iis7.0设置路由

    iis7.0设置路由 ,url转向,伪静态 <system.webServer>      <modules runAllManagedModulesForAllRequests=& ...

  9. Django 2.0 的路由如何实现正则表达式

    在django2.0的路由系统中,摒弃了1.x中的url,而改用path.需要导入path. from django.urls import path,re_path 在1.x中,使用url()即可实 ...

随机推荐

  1. mybatis-plus-generator 模板生成代码

    maven: <dependencies> <dependency> <groupId>com.baomidou</groupId> <artif ...

  2. GoF的23种设计模式之结构型模式的特点和分类

    结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...

  3. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  4. linux学习-防火墙指令

    Redhat7之前的版本(iptables) 开启关闭防火墙 放行端口 RedHat7防火墙相关的指令(firewall-cmd) 安装firewall 本文内容适用于 redhat 和 centos ...

  5. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

  6. vue 鼠标右击事件

    使用@contextmenu.prevent即可 参考:https://www.cnblogs.com/sxz2008/p/6953082.html

  7. Jmeter的安装与配置。

    1.本机配置好JAVA环境. 2.官网下载压缩包,在任意目录下解压. 3.修改配置文件 ,打开Jmeter的bin目录下jmeter.porperties,修改 language=zh_CN samp ...

  8. python基础2--if,while,for,逻辑运算

    1.1 条件控制语句 1.if - elif - else 2.常用操作运算符 < > >= <=  == != 3.if elif 后面一定要有条件 else后面没有条件 1 ...

  9. Java自学-类和对象 传参

    Java中的传参 变量有两种类型 基本类型 和类类型 参数也是变量,所以传参分为 基本类型传参 类类型传参 步骤 1 : 基本类型传参 基本类型传参 在方法内,无法修改方法外的基本类型参数 publi ...

  10. restFull api接口

    RestFull api接口 前后端分离开发的接口规范 什么是RestFull 是目录比较流行的api设计规范 注:restfull api规范应用场景,前后端分离的项目中 数据接口的现场 例如: / ...