traefik 教程

traefik 是一个HTTP层面的反向代理和负载均衡, 用Go编写, 有的功能包括:

  • 没有依赖
  • 带熔断器
  • Let’s Encrypt证书支持
  • 无缝重启
  • 支持多个后端:Docker/Kubernetes等
  • 自带一个简单的web ui,用于查看请求响应时间和配置等

官网是https://traefik.io/ . 下载traefik之后,要使用traefik,我们首先要写一份配置文件:

defaultEntryPoints = ["http"]
traefikLogsFile = "traefik.log"
logLevel = "INFO"

[accessLog]
filePath = "access.log"

[web]
address = ":8088"

[entryPoints]
    [entryPoints.http]
    address = ":8080"
    compress = true

[file]
    [backends]
        [backends.local]
            [backends.local.servers.all]
            url = "http://127.0.0.1:80"

    [frontends]
        [frontends.local]
        backend = "local"
            [frontends.local.routes.all]
            rule = "Path:/"

如官网所用示例图:

traefik architecture

其中有三个概念需要了解:

  • entrypoint: 这是流量的入口,即是http还是https
  • frontend: 这相当于nginx配置中的location, server_name等,即当流量还在nginx上,没有proxy_pass之前
  • backend: 这相当于nginx中,proxy_pass后接的配置

了解了这个概念之后, 我们再来看一下traefik是怎么读取配置文件的. traefik配置文件的读取顺序是:

  • 默认配置
  • 配置文件
  • 命令行参数
  • k-v存储

从上往下依次增高. 这也就意味着, traefik可以动态配置. 现在我们来解释一下上面贴出来的配置文件:

  • 首先前面六行是配置了traefik自身的配置和日志, 包括日志路径, 入口点, 只支持HTTP因为是在本地使用, 没有配域名和证书
  • 然后 [web] 指的是traefik自带的web管理界面
  • entryPoints 里则是对traefik的入口点进行配置, 包括监听地址等
  • file 中则包括上面所说的 frontendsbackends 的配置(记得一定要写file…我被官网教程坑了)

用下来的感受如下(主要是和Nginx作对比):

  • 缺少静态文件服务的支持
  • web ui意义并不大
  • 配置文件比Nginx的还复杂一点, 反向代理对HTTP的操作能力却又不如Nginx
  • 只支持HTTP(s),不支持TCP层面的反向代理

于是我又换回了Nginx. Nginx大法好!


更多文章
  • Redis源码阅读:bitmap 位图的运算
  • Redis源码阅读:set是怎么做交并集运算的?
  • Redis源码阅读:list实现(ziplist, quicklist)
  • Redis源码阅读:RDB是怎么实现的
  • Redis源码阅读:AOF重写
  • Redis源码阅读:AOF持久化
  • Redis源码阅读:key是怎么过期的
  • Redis源码阅读:字典是怎么实现的
  • Redis源码阅读:执行命令
  • Redis源码阅读:启动过程
  • WAL(Write-ahead logging)的套路
  • 搞定CORS问题
  • 如何定位程序问题所在
  • 设计一个IM归档系统
  • logrotate read only filesystem问题