traefik配置


概述

  • Entrypoints -> 入口
  • HTTP Router -> 路由规则
  • Service -> 可以理解为部署在docker中的容器、这里也可以是在配置文件中自定义的service
  • TLS -> https

toml配置文件

traefik支持通过toml配置文件手动配置https、自定义RouterService;

  • traefik.toml
    # 全局配置
    [global]
    checkNewVersion = false
    sendAnonymousUsage = false
    # 入口
    [entryPoints]
    # http 
    [entryPoints.web]
      address = ":80"
    # https "websecure"这个名字是自己定义的  
    [entryPoints.websecure]
      address = ":443"
    #  traefik web ui 
    [entryPoints.traefik]
      address = ":8080" 
    # 免费Let's Encrypt 证书(注意:必须域名解析到的主机中才有效,traefik会把秘钥写入acme.json中)
    [certificatesResolvers.bxtlschallenge.acme]
    # 自己的邮箱地址
    email = "xxxx@xx.com"
    # 秘钥写入地址,根据自己文件映射来配置
    storage = "/letsencrypt/acme.json"
    [certificatesResolvers.bxtlschallenge.acme.httpChallenge]
    entryPoint = "web"
    

自定义Router、Services(貌似必须定义在外部文件里面,坑了好久)

[providers.file]
directory = “/etc/traefik/conf”

traefik 需要开启的功能

[api]
insecure = true
dashboard = true
[ping]
[providers.docker]
endpoint = “unix:///var/run/docker.sock”
exposedByDefault = true

传输配置

[serversTransport]

如果后端需要代理https自定义证书,可以使用这种方式就可以跳过验证,不然会报x509证书错误

insecureSkipVerify = true


- `file.toml`
```conf
[http]
  # 自定义 routers
  [http.routers]
    # http 方式
    [http.routers.routers-cnblogs]
      entryPoints = ["web"]
      rule = "Host(`cnblogs.fanxp.com`)"
      service = "cnblogs"
    # https 方式
    [http.routers.routers-cnblogs1]
      entryPoints = ["websecure"]
      rule = "Host(`cnblogs.fanxp.com`)"
      service = "cnblogs"
      [http.routers.routers-cnblogs1.tls]
        certResolver = "bxtlschallenge"
  # 自定义 services
  [http.services]
    [http.services.cnblogs]
      # 可以设置多个url traefik 根据算法做负载均衡
      [http.services.cnblogs.loadBalancer]
        [[http.services.cnblogs.loadBalancer.servers]]
          url = "https://www.cnblogs.com/fanxp/"
        [[http.services.cnblogs.loadBalancer.servers]]
          url = "https://github.com/fanxiaoping/grpc-test"
  • 测试traefik-compose.yml
version: '3'

services:
    traefik:
        image: traefik:v2.1
        container_name: traefik
        ports:
            # HTTP 端口
            - "80:80"
            # HTTPS 端口
            - "443:443"
            # Web UI 端口
            - "8080:8080"
        volumes:
            # 这样Traefik可以监听Docker事件
            - /var/run/docker.sock:/var/run/docker.sock:ro
            # 启动配置文件
            - ./traefik.toml:/etc/traefik/traefik.toml
            # 自定义routers、services
            - ./conf:/etc/traefik/conf
            # 存储证书秘钥
            - ./letsencrypt:/letsencrypt

    whoami:
        # 公开API以显示其IP地址的容器
        image: containous/whoami
        container_name: whoami
        labels:
            # 地址:whoami.fanxp.com
            - "traefik.http.routers.whoami.rule=Host(`whoami.fanxp.com`)"
            # 入口方式,这里采用https
            - "traefik.http.routers.whoami.entrypoints=websecure"
            # 指定证书
            - "traefik.http.routers.whoami.tls.certresolver=bxtlschallenge"

    whoami2:
        # 公开API以显示其IP地址的容器
        image: containous/whoami
        container_name: whoami2
        labels:
            # 地址:whoami.fanxp.com/v2
            - "traefik.http.routers.whoami2.rule=Host(`whoami.fanxp.com`) && PathPrefix(`/v2`)"
            # 默认代理使用http://172.0.0.4 配置方式用https://172.0.0.4
            # - "traefik.http.services.bx_resource_library.loadbalancer.server.scheme=https"
            # 定义中间件 规则
            - "traefik.http.routers.whoami2.middlewares=whoami2-stripprefix"
            # 代理:172.0.0.4/v2访问,这肯定不是我们想要的 写上规则后 代理:172.0.0.4
            - "traefik.http.middlewares.whoami2-stripprefix.stripprefix.prefixes=/v2"
            # 如果容器有多个端口 可以指定当前service暴露哪一个端口,默认第一个
            - "traefik.http.services.whoami2.loadbalancer.server.port=80"
            # 入口方式,这里采用https
            - "traefik.http.routers.whoami2.entrypoints=websecure"
            # 指定证书
            - "traefik.http.routers.whoami2.tls.certresolver=bxtlschallenge"

参考链接


文章作者: wuzhiyong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuzhiyong !
评论
 上一篇
加密数据如何进行模糊查询 加密数据如何进行模糊查询
问题数据加密之后,如何进行模糊查询? 解决办法 —— 分词如abcdefghijklmn按4个字符一组分词,则可分为 abcd bcde cdef defg efgh fghi … 分词后分别加密存储,模糊查询时就可以直接使用了.
2021-03-04
下一篇 
tarefik入门使用 tarefik入门使用
traefik概述traefik 与 nginx 一样,是一款优秀的反向代理工具,或者叫 Edge Router。具有以下优势: 无须重启即可更新配置 自动的服务发现与负载均衡 与 docker 的完美集成,基于 container la
2021-02-07
  目录