「奇技淫巧」 Traefik “智能”反向代理(解放苦于配置的双手)

traefik 是一款反向代理、负载均衡服务,使用golang 实现的。 和nginx 最大的不同是,它支持自动化更新反向代理和负载均衡配置。

官网:

https://traefik.io/

官方文档:

https://doc.traefik.io/traefik/

简单应用

反向代理应用

工具特点

  • docker 服务自动发现
  • HTTPS 自动配置
  • prometheus 数据接口
  • web-ui
  • 80-443 强制跳转
  • 配置简单
    • 给容器打上对应的 label 标签即可自动完成反向代理路由与负载均衡配置

Traefik Diagram

反向代理示例

采用分离部署、即将 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

使用方法:

  1. 首先使用 docker-compose 启动 traefik
cd traefik docker-compose up -d
  1. 选择需要的应用、修改必要的配置文件、添加需要的 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"
  1. 然后使用 docker-compose 启动相应的服务。
docker-compose up -d

性能监控

traefik 默认提供 prometheus 数据收集功能、可以自己选择是否开启、如果开启可以使用 prometheus + grafana 完成对自己 web 运行状态的监控。

  • 面板展示

image.png

目前使用 traefik 运行的项目

https://github.com/expoli/docker-compose-files

大杂烩、记录了一些自己用的服务与相应的配置文件、欢迎 pr 其他的有趣的项目

https://github.com/expoli/start-bolo-with-docker-compose

目前 bolo 博客、默认的 docker-compose 部署方式方案

https://expoli.tech

懒人如我、肯定不会失去享受的机会的, 老nginx 配置有点烦了

   
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    29 引用
  • Traefik

    1 引用