zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    解决Eclipse点击运行后控制台不能自动弹出的问题
    vc中的空格怎么变成了“ `”或“^”,怎么变回来
    ping百度域名时的收获
    java学习(权限修饰符)
    can't create socket (must run as root?) : Permission denied
    Zabbix各种报错信息和遇到的问题
    windows2012r2 更改管理员密码
    Zabbix钉钉机器人报警
    用route命令添加永久路由
    zabbix使用jmx监控tomcat
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11552607.html
Copyright © 2011-2022 走看看