之前我写了不少配合 Traefik 进行服务注册并提供弹性伸缩后自动进行负载均衡的例子,也贴过它的配置,但是似乎一直没有详细的解释过关于 Traefik 配置和使用的文章,考虑了一下,应该写一篇聊聊。

Traefik 是什么又能做什么

管理界面一览

如果看过我之前的文章,那么你会 Traefik 这个软件应该有一些简单的理解,提供类似 Nginx 的负载能力,不同的是可以自动化配置 “upstream”,或者说是免配置即开即食的consul。官方的定义如下:

A reverse proxy / load balancer that’s easy, dynamic, automatic, fast, full-featured, open source, production proven, provides metrics, and integrates with every major cluster technologies… No wonder it’s so popular!

简单来说就是,不论你用它来做负载均衡还是反向代理,都是符合它的设计理念的,也提供了大量的功能支撑,让你能够在不同的业务场景下,简单的配置就能实现一定规模的高性能应用。

实际使用的话,不论是配合 K8ScomposeEtcdranchertradition docker都是可以的。

我个人使用在 compose 的场景下,以下配置皆以此为例,其他环境配置大体一致,细节稍有不同,等回头买几台微塔服务器,再折腾个人的 K8S 吧(毕竟单节点没什么意思)。

适合的场景

  • 如果你的机器或者 IP 资源有限,但是你却需要部署多个站点,又期望能够让站点应用保持高度隔离。
  • 你已经厌烦传统方案中使用 haproxy 或者 nginx 对于多个应用的前后端扩容修改要来回修改的麻烦事儿。
  • 你不想在服务端挂载 SSL,配置加密算法,添加 gzip 等本该 Gateway 提供的能力,希望让每一层的功能保持简单纯粹。
  • 1分钟内拥有有一个轻量高效的本地开发环境。

如何配置

下面以最新的稳定版本 1.6.x 为例,演示如何快速搭建你的应用网关,docker-compose.yml 配置文件比较简短,我们可以先看一下:

查看配置可以发现我将外部的一些文件和配置映射到了容器内部,并对外公开了 80 、和 443 端口,默认的两个端口被我映射到了容器的 127.0.0.1 ,应用的日志则被保存了出来。

这里如果使用的是标准的 Linux 发行版,可以考虑将时区和宿主机的时间映射到容器内部,保障时间一致,如果是 OSX 系统的话,可以忽略这点。

你可能会问,如果将管理端口和健康检查的端口进行了非公开暴露,那么怎么才能能够进行常规的管理查看和健康检查呢,答案很简单,配合 traefik.toml 配置文件中的 file 功能,在其中定义反向代理的规则即可,稍后会详细描述。

Traefik 支持配置的功能很多,需要注意的是,如果你在入口点配置了 HTTP 协议自动跳转 HTTPS,那么所有的入口点都会进行跳转,你将无法提供 HTTP 服务,所以下面这段注释掉的内容,视你的情况选择是否使用。

如果你使用它作为前端,装载多个不同域名的证书,实现 SNI 功能,那么只需要多添加一个字段即可同时支持 lab.comlab2.com 的加密访问:

Health

关于健康检查和管理界面,默认的路径比较丑陋,必须使用指定端口访问,但是使用 [file] 字段,先将默认的端口定义为你的“后端”服务地址,然后再添加两个不同的前端路由,即可使用浏览器默认的端口进行访问。

参考上面的例子,当你直接访问 dashboard.lab.com ,首先会跳转到 https 协议,然后再展示管理界面。

而原来需要访问 xxx.xxx.xxx.xxx:4398/ping 去实现健康监控,只需要访问 ping.lab.com 即可(这里涉及到路由重写)。

API访问

下面是 traefik.toml 的完整配置。

相关资源

如果你有更多对 Header 的定制需求,或者转发需求,可以了解一下下面的文档。

当然如果你想要配合 UFW(iptable) 使用,那么可以参考这篇文章,直接裸跑 Traefik

其他

Traefik 的介绍就先到这里,或许等 1.7 正式发布后,我会更新额外的内容。

–EOF