Traefik入门

前言

traefiknginx 一样,是一款优秀的反向代理工具,或者叫 Edge Router。至于使用它的原因则基于以下几点

  • 无须重启即可更新配置
  • 自动的服务发现与负载均衡
  • docker 的完美集成,基于 container label 的配置
  • 漂亮的 dashboard 界面
  • metrics 的支持,对 prometheusk8s 的集成

安装Docker

安装

1
2
apt install docker.io
apt install docker-compose

查看版本

1
2
docker --version
docker-compose --version

使用docker-compose启动

新建yaml文件

1
2
3
mkdir /root/traefik
cd /root/traefik
vi traefik-v2.1.yaml

添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'
services:
reverse-proxy:
image: traefik:2.1.6
# Enables the web UI and tells Traefik to listen to docker
# 启用webUI 并告诉Traefile去监听docker的容器实例
command: --api.insecure=true --providers.docker
ports:
# traefik暴露的http端口
- "8888:80"
# webUI暴露的端口(必须制定--api.insecure=true才可以访问)
- "8080:8080"
volumes:
# 指定docker的sock文件来让traefik获取docker的事件,从而实现动态负载均衡
- /var/run/docker.sock:/var/run/docker.sock

注意

8888:80是代理所有的8888端口的服务转发到提供服务的端口号为80的docker服务

8080:8080是管理页面的服务

前面是对外的端口号不能被占用

使用docker-compose创建集群

1
docker-compose -f traefik-v2.1.yaml up -d reverse-proxy

出现如下则创建成功

Status: Downloaded newer image for traefik:2.1.6
Creating root_reverse-proxy_1 …
Creating root_reverse-proxy_1 … done

查看使用docker-compose启动的应用

1
docker-compose -f traefik-v2.1.yaml ps

信息如下:

image-20210223143452958

查看Traefik官方Dashboard

http://www.psvmc.cn:8080/

或者查看接口返回的

http://www.psvmc.cn:8080/api/rawdata

显示如下

image-20210223143951986

查看创建的网络

1
docker network ls

可以看到生成了一个traefik_default的网络

创建路由及测试

创建路由

Traefik来检测新服务并为你创建一个路由

注意

服务的配置文件要和代理的配置文件放在一个文件夹下,这样它们才会在同一个网络下。

当然不在一个文件夹下也可以,但是要指定对应的网络,比如上面生成的traefik_default,创建服务时如果不指定网络会根据所在文件夹名_default生成网络。

创建一个新服务

1
2
cd /root/traefik
vi whoami-service.yaml

内容如下:

1
2
3
4
5
6
version: '3'
services:
whoami:
image: containous/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`test.psvmc.cn`)"

创建服务

1
docker-compose -f whoami-service.yaml up -d whoami

成功显示如下

image-20210223145039670

查看新创建的服务

1
docker-compose -f whoami-service.yaml ps

显示如下

image-20210225105005921

再次查看traefik中的路由信息(就会发现服务自动加载进去了)
其实有点儿类似kong 的路由,只是traefik会自动监听docker的事件

查看配置后生成的JSON配置

这个和图形化界面看到的是一致的

1
curl -s  "http://localhost:8080/api/rawdata" | python -m json.tool

路由的方式可以参考以下的几种

image-20210223152946409

测试traefik相关功能

测试

1
curl -H Host:test.psvmc.cn http://localhost:8888

显示如下

image-20210223150456836

这样我们就可以看出

Host为test.psvmc.cn的请求都会从whoami的服务响应

或者我们也可以映射过域名后,在服务器外访问

http://test.psvmc.cn:8888/

服务扩充

我们下载查看服务,会发现whoami的Servers的数量是1

image-20210223150818975

扩充

1
docker-compose -f whoami-service.yaml up -d --scale whoami=2

成功信息如下

image-20210223151126406

这时候负载就是两个了

image-20210223151212225

点击上面的那一条数据,我们可以看到两个服务的负载

image-20210223151737408

我们在测试一下

1
curl -H Host:test.psvmc.cn http://localhost:8888

会发现响应的请求在两个负载上来回跳

结果1

image-20210223151916198

结果2

image-20210223152027573