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


更多文章
  • Android调用gRPC的两个小工具函数
  • Android上结合kotlin使用coroutine
  • gRPC错误处理
  • Java collection的结构
  • 为啥Redis使用pipelining会更快?
  • 通过阳台种菜实现蔬菜自由
  • 从GORM里学习到的panic处理方式
  • Go使用闭包简化数据库操作代码
  • TCMalloc设计文档学习
  • Flask和requests做一个简单的请求代理
  • Linux常用命令(四):xargs
  • Linux常用命令(二):htop
  • Linux常用命令(三):watch
  • Linux常用命令(一):netcat
  • 结合Flask 与 marshmallow快速进行参数校验