「奇技淫巧」 Traefik “智能”反向代理(解放苦于配置的双手)
traefik 是一款反向代理、负载均衡服务,使用golang 实现的。 和nginx 最大的不同是,它支持自动化更新反向代理和负载均衡配置。
官方文档:https://doc.traefik.io/traefik/
简单应用
反向代理应用
工具特点
- docker 服务自动发现
- HTTPS 自动配置
- prometheus 数据接口
- web-ui
- 80-443 强制跳转
- 配置简单
- 给容器打上对应的
label
标签即可自动完成反向代理路由与负载均衡配置
- 给容器打上对应的
反向代理示例
采用分离部署、即将 traefik
作为一个独立的前置 web 入口,后端服务容器通过配置 label
标签完成路由与负载均衡配置、其它高级用法请参考官方文档。
- 架构示意图
traefik docker-compose.yaml
version: "3.3"
services:
traefik:
image: "traefik:v2.5"
container_name: "traefik"
restart: always
# labels:
# # 取消注释即可使用 traefik 面板
# - "traefik.enable=true"
# - "traefik.port=8080"
# - "traefik.http.services.dummyService.loadbalancer.server.port=8080"
# - "traefik.http.routers.traefik_http.service=api@internal"
# - "traefik.http.routers.monitor.rule=Host(`monitor.example.org`)"
# - "traefik.http.routers.monitor.entrypoints=websecure"
# - "traefik.http.routers.monitor.tls.certresolver=myresolver"
command:
# - "--log.level=DEBUG"
# 取消注释即可使用 traefik 面板
# - "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesResolvers.myresolver.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
- "--certificatesresolvers.myresolver.acme.email=me@example.org"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
# 强制 HTTPS 跳转
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
# 取消注释即可使用 prometheus 搜集性能数据
# - "--metrics.prometheus=true"
# - "--entryPoints.metrics.address=:8082"
# - "--metrics.prometheus.entryPoint=metrics"
ports:
- "80:80"
- "443:443"
# - "8080:8080" # 面板端口
# network_mode: host
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
# 测试容器
# whoami:
# image: "traefik/whoami"
# container_name: "simple-service"
# restart: always
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.whoami.rule=Host(`whoami.example.org`)"
# - "traefik.http.routers.whoami.entrypoints=websecure"
# - "traefik.http.routers.whoami.tls.certresolver=myresolver"
# networks:
# - proxy-tier
networks:
proxy-tier:
external:
name: traefik
使用方法:
- 首先使用
docker-compose
启动traefik
cd traefik
docker-compose up -d
- 选择需要的应用、修改必要的配置文件、添加需要的
label
标签
cloudreve:
image: xavierniu/cloudreve:arm64v8
restart: always
labels:
- "traefik.enable=true"
- "traefik.port=5212"
- "traefik.http.routers.cloudreve.rule=Host(`cloudreve.exampl.org`)"
- "traefik.http.routers.cloudreve.entrypoints=websecure"
- "traefik.http.routers.cloudreve.tls.certresolver=myresolver"
- 然后使用
docker-compose
启动相应的服务。
docker-compose up -d
性能监控
traefik 默认提供 prometheus
数据收集功能、可以自己选择是否开启、如果开启可以使用 prometheus
+ grafana
完成对自己 web 运行状态的监控。
- 面板展示
目前使用 traefik 运行的项目
https://github.com/expoli/docker-compose-files
大杂烩、记录了一些自己用的服务与相应的配置文件、欢迎
pr
其他的有趣的项目
https://github.com/expoli/start-bolo-with-docker-compose
目前 bolo 博客、默认的 docker-compose 部署方式方案
懒人如我、肯定不会失去享受的机会的,
老nginx 配置有点烦了
毕竟是糖醋鱼大佬 ,原来是你在天天考古
?????
你们在干什么?
这个是什么?看起来好像可以替代nginx
可以配合 docker 使用的一个反向代理软件、可以用作集群的 ingress ,挺好用的,不用手动配置了
在考古,哈哈哈哈