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大法好!


更多文章
  • 学习使用Bootstrap4的栅格系统
  • 利用Github的WebHook完成自动部署
  • 使用Tornado和rst来写博客
  • Haskell do notation
  • foldl 和 foldr 的变换
  • Haskell TypeClass 笔记
  • 重新捡起你那吃灰的树莓派
  • Tornado 源码阅读
  • JavaScript权威指南笔记
  • Python零碎知识汇总
  • C语言的位操作
  • 分治
  • 关于python的decorator和descriptor
  • 程序设计实践笔记
  • Thinking Recursively