当前位置: 首页 > 工具软件 > Traefik > 使用案例 >

traefik

贺福
2023-12-01

traefik(https://traefik.io/) 是一款开源的反向代理与负载均衡工具。非常适合与微服务系统结合,可以实现自动化动态配置。目前支持 Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API 等等后端模型。

我们可以使用 traefik + docker + daocloud 来打造一套最简的 CI/CD 系统,准确的说是最低配版的 CI/CD 系统… 不过适合个人或者在团队最初期使用。

配置好这套系统之后,开发人员只需要提交代码,等上几分钟让系统自动打包部署,就可以通过域名访问线上的服务,不需要自己打包,也不需要手动更新服务器配置。如果要发布一款 2048 的游戏,只要提交一下代码,过几分钟就能够通过 2048.your.doman 访问游戏页面了
优点:
单文件部署,与系统无关,同时也提供小尺寸 Docker 镜像。

支持 Docker/Etcd 后端,天然连接我们的微服务集群。

内置 Web UI,管理相对方便。

自动配置 ACME(Let’s Encrypt) 证书功能。

性能尚可,我们也没有到压榨 LB 性能的阶段,易用性更重要。

Restful API 支持。

支持后端健康状态检查,根据状态自动配置。

支持动态加载配置文件和 graceful 重启。

支持 WebSocket 和 HTTP/2。

准备工作
首先,你需要准备以下内容:

一个属于你自己的域名,通过修改 /etc/hosts 来模拟也 OK
一台支持 docker 的服务器
在服务器上安装好 docker

traefik 工作机制介绍
traefik 支持监听很多配置服务来自动更新反向代理和负载均衡配置,比如 etcd/consul 等 kv 存储服务,也支持直接监听 kubernetes/docker 这类应用管理服务。

以 docker 为例,简单说一下 traefik 的运行原理。traefik 启动以后会调用 docker 接口,读取到容器信息。traefik 会根据每个容器的镜像名称和暴露的端口,来配置反向代理。拿开头的例子,假如 2048 游戏服务的镜像名称是 2048,暴露端口是 8080,traefik 启动后会为容器配置反向代理,用 nginx 的配置文件来表达的话,就是下面这样:

server {
    server_name 2048.${traefik.domain};
    listen 80;

    location / {
        proxy_pass http://localhost:8080;
    }
}

traefik.domain 是需要配置到 traefik 当中的域名,treafik 会为容器分配访问的域名。

当 docker 容器发生变化的时候,比如 2048 容器的暴露端口变成了 9090,traefik 会自动更新反向代理配置:

server {
    server_name 2048.${traefik.domain};
    listen 80;

    location / {
        proxy_pass http://localhost:9090;
    }
}

当容器停止的时候,traefik 会自动禁掉这条反向代理的配置。整个过程当中 traefik 并不会重启,也不需要工程师手动更新配置。

配置 traefik
traefik 本身支持通过 docker 部署,部署方式大致如下:

$ docker run --restart=always -d -p 80:80 \
    --name traefik \
    -v $PWD/traefik.toml:/etc/traefik/traefik.toml \
    -v /var/run/docker.sock:/var/run/docker.sock \
    traefik:v1.6.6

命令中的 traefik.toml 是 traefik 的配置文件,只集成 docker 的话配置文件很简单:

[entryPoints]
 [entryPoints.http]
 address = ":80"


[docker]
  endpoint = "unix:///var/run/docker.sock"
  domain = "{your.domain}"
  watch = true

注意填写配置文件当中的域名,同时也别忘了在域名的 dns 配置,最简单的方式是配置一条统配域名配置:

A *.your.domain -> your.server.ip

配置好 traefik 之后,可以部署一个 demo 试一下,只要容器正常对外暴露端口,应该就可以直接通过域名来访问服务了。

daocloud
本文主要想介绍 traefik,在这儿只简单说一下 daocloud。daocloud 是一款 CI/CD 系统。traefik 处理的是反向代理配置的自动化问题,daocloud 则是解决 docker 打包的自动化问题,通过 daocloud 可以实现自动化打包 docker 镜像和自动化部署。具体使用方法直接去看他们官方文档吧 https://daocloud.io ,在此就不多做介绍了。

总结
在微服务越来越流行的当下,工程自动化的需求也越来越大。如果说 CI/CD 系统促成了微服务架构的诞生和进化,那么微服务则是孵化出 traefik 这类服务的大环境。有了一套 CI/CD 系统,无论是团队还是个人,想要做个新服务或者做个 demo 验证想法,都将变得更加简单和轻松。

 类似资料: