对于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. vue nexttick的理解和使用场景

    应用场景 需要在视图更新之后,基于新的视图进行操作 文档说明 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM nextTick原理 1.异步说明 V ...

  2. FusionInsight大数据开发学习总结(1)

    FusionInsight大数据开发 FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景. 技能需求 扎实的编程基础 Java/Scala/python/SQL/sh ...

  3. golang 源码文件

    Go源码文件分三个种类: 1)命令源码文件:如果一个源码文件被声明属于main代码包,且该文件代码中包含无参数声明和结果声明的main函数,则它就是命令源码文件.命令源码文件可以通过go run命令直 ...

  4. ES7.3.0配置邮件告警

    情况说明: 三台es组成集群,一台kibana,版本均为7.3.0 es版本要求是白金版,基础版的不行,不过可以试用30天的白金版 步骤:先说我自己走通的流程,然后介绍官方说明 1.因为我这边使用的是 ...

  5. Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离

    <Spring Security实现OAuth2.0授权服务 - 基础版>和<Spring Security实现OAuth2.0授权服务 - 进阶版>两篇文章中介绍如何搭建OA ...

  6. Mybatis事物浅谈

    本篇文章主要对Mybatis事物进行基础的介绍.先回顾JDBC事物,再了解Mybatis里面的事物应用. 1.JDBC的事务管理回顾 JDBC的事务管理是基于Connection对象实现的: 开启事务 ...

  7. CORS-跨域资源共享 解决跨域问题

    1.什么是跨域? a.test.com 和 b.test.com 是两个不同的域,而处于安全机制考虑,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容,但是我们在项目开发时,经常遇到一个页 ...

  8. js数组与字符串类型相同方法的比较

    数组和字符串有很多相似的对方,比如数组和字符串都有以下方法: concat indexOf lastIndexOf slice includes 鉴于toString及valueOf方法基本类型都有, ...

  9. Js数组语法

    js数组整理导向图 ---欢迎收藏^ - ^

  10. Android中控件AutoCompleteTextView的使用方法和一些属性

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...