traefik概述
traefik
与 nginx
一样,是一款优秀的反向代理工具,或者叫 Edge Router
。具有以下优势:
- 无须重启即可更新配置
- 自动的服务发现与负载均衡
- 与
docker
的完美集成,基于container label
的配置 - 漂亮的
dashboard
界面 metrics
的支持,对prometheus
和k8s
的集成
traefik
在1.x
和2.x
版本差异巨大,本文采用2.4.1
版本.
traefik部署
本文采用docker-compose
方式部署traefik
.
version: '3'
services:
reverse-proxy:
image: traefik:2.4.1
# Enables the web UI and tells Traefik to listen to docker
# 启用webUI 并告诉Traefile去监听docker的容器实例
command: --api.insecure=true --providers.docker
ports:
# traefik暴露的http端口
- "80:80"
# webUI暴露的端口(必须制定--api.insecure=true才可以访问)
- "8080:8080"
volumes:
# 指定docker的sock文件来让traefik获取docker的事件,从而实现动态负载均衡
- /var/run/docker.sock:/var/run/docker.sock
访问 http://192.168.41.128:8080 traefik
的dashboard
.
traefik使用
新建个whoami
服务.
# ...
whoami:
# A container that exposes an API to show its IP address
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
启动whoami
服务:
# 启动一个whoami实例
docker-compose up -d whoami
# 测试
curl -H Host:whoami.docker.localhost http://127.0.0.1
# 输出
Hostname: a656c8ddca6c
IP: 172.27.0.3
# 启动多个whoami实例
docker-compose up -d --scale whoami=2
# 在测试
curl -H Host:whoami.docker.localhost http://127.0.0.1
# 输出自动在两个实例中负载均衡
IP: 172.18.0.4
IP: 172.18.0.3
在daskboard
上也可以看到http service
中有两个whoami
实例.