|

Trae 教程

Traefik 教程

Traefik(发音为“traffic”)是一个现代化的开源 HTTP 反向代理和负载均衡器,专为微服务和容器环境设计。它支持自动服务发现、动态配置和 Let’s Encrypt 自动 HTTPS 证书申请,非常适合与 Docker、Kubernetes 等容器编排工具集成。相比传统 Nginx,Traefik 的配置更简洁,通过 Docker 标签(labels)即可实现路由规则,无需手动重载配置。

本教程基于 Traefik v3.0(最新稳定版),聚焦 Docker 环境下的入门和使用。假设你已安装 Docker 和 Docker Compose。如果你是初学者,建议从官方文档起步。

一、Traefik 核心概念

  • 入口点(EntryPoints):Traefik 监听的端口,如 HTTP 的 80 端口和 HTTPS 的 443 端口。
  • 提供者(Providers):配置来源,如 Docker(自动发现容器)、文件或 Kubernetes。
  • 路由器(Routers):匹配请求规则(如 Host: example.com),指向后端服务。
  • 服务(Services):后端目标,如 Docker 容器或负载均衡组。
  • 中间件(Middlewares):处理请求,如重定向 HTTP 到 HTTPS、添加认证。
  • 动态配置:支持热加载,无需重启 Traefik。

二、安装 Traefik

  1. 使用 Docker Compose 快速启动
    创建一个 docker-compose.yml 文件:
   version: "3.8"

   services:
     traefik:
       image: traefik:v3.0
       container_name: traefik
       restart: unless-stopped
       ports:
         - "80:80"
         - "443:443"
         - "8080:8080"  # Dashboard 端口
       volumes:
         - /var/run/docker.sock:/var/run/docker.sock:ro  # 监听 Docker 事件
         - ./traefik.yml:/traefik.yml:ro  # 静态配置文件
         - ./acme.json:/acme.json  # ACME 证书存储(需预创建空文件,chmod 600)
         - ./dynamic.yml:/dynamic.yml:ro  # 动态配置文件
       command:
         - --api.dashboard=true  # 启用 Dashboard
         - --providers.docker=true  # 启用 Docker 提供者
         - --providers.file.filename=/dynamic.yml  # 加载动态配置
         - --entrypoints.web.address=:80  # HTTP 入口
         - --entrypoints.websecure.address=:443  # HTTPS 入口
         - --certificatesresolvers.myresolver.acme.email=your@email.com  # Let's Encrypt 配置
         - --certificatesresolvers.myresolver.acme.storage=/acme.json
         - --certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web

   networks:
     default:
       name: traefik-net
  • 预创建 acme.jsontouch acme.json && chmod 600 acme.json(用于存储 SSL 证书)。
  1. 启动 Traefik
   docker compose up -d

访问 http://localhost:8080/dashboard/ 查看 Dashboard(生产环境需添加认证)。

三、静态配置(traefik.yml)

静态配置定义入口点和提供者,示例:

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
          permanent: true
  websecure:
    address: ":443"
    http:
      middlewares:
        - secure-headers

api:
  dashboard: true

providers:
  docker:
    exposedByDefault: false  # 只暴露启用标签的容器
    endpoint: "unix:///var/run/docker.sock"
  file:
    filename: "/dynamic.yml"
    watch: true  # 热加载

certificatesResolvers:
  myresolver:
    acme:
      email: your@email.com
      storage: /acme.json
      httpChallenge:
        entrypoint: web
  • 这会自动将 HTTP 重定向到 HTTPS,并启用 Let’s Encrypt。

四、动态配置(dynamic.yml)

动态配置定义路由和中间件,支持热更新。示例:

http:
  middlewares:
    secure-headers:
      headers:
        frameDeny: true
        sslRedirect: true
    auth:
      basicAuth:
        users:
          - "admin:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"  # 使用 htpasswd 生成

  routers:
    to-whoami:
      rule: "Host(`whoami.example.com`)"  # 路由规则
      service: whoami
      entryPoints:
        - websecure
      tls:
        certResolver: myresolver  # 自动 HTTPS
      middlewares:
        - auth  # 添加认证

  services:
    whoami:
      loadBalancer:
        servers:
          - url: "http://whoami:80"  # 后端服务
  • 修改后,Traefik 会自动加载,无需重启。

五、与 Docker 服务集成

在其他服务的 docker-compose.yml 中添加标签(labels)实现自动发现。示例:一个 whoami 服务。

version: "3.8"

services:
  whoami:
    image: traefik/whoami
    container_name: whoami
    networks:
      - traefik-net
    labels:
      - "traefik.enable=true"  # 启用 Traefik
      - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"  # 路由规则
      - "traefik.http.routers.whoami.entrypoints=websecure"  # HTTPS 入口
      - "traefik.http.routers.whoami.tls.certresolver=myresolver"  # 自动证书
      - "traefik.http.services.whoami.loadbalancer.server.port=80"  # 后端端口
  • 启动:docker compose up -d
  • 访问 https://whoami.example.com(需配置 DNS 指向服务器 IP)。

六、进阶:结合其他工具

  • 与 REST API:Traefik 可代理你的 REST API 服务(如 Node.js Express),通过标签配置路径路由,例如 PathPrefix(/api)
  • 与 Linux Cron:定时重载动态配置或检查证书:
  #!/bin/bash
  # check-cert.sh
  docker exec traefik traefik certificates renew --certresolver=myresolver

添加到 crontab:0 2 * * * /bin/bash /path/to/check-cert.sh(每天凌晨 2 点检查证书)。

  • 与 Python/Selenium:在 Python 脚本中使用 Selenium 测试 Traefik 代理的 Web 服务,结合 tqdm 显示测试进度。
  • Dashboard 认证:在动态配置中添加 Basic Auth 中间件,保护 /dashboard/

七、调试与常见问题

  • 日志查看docker logs traefik
  • 常见错误
  • 证书申请失败:检查 email 和域名解析。
  • 服务未发现:确保容器在同一网络,并启用标签。
  • 使用 console.log 等效:在 Docker 日志中用 --log.level=DEBUG 输出详细日志。
  • 性能优化:启用压缩中间件,限制速率。

八、总结

Traefik 通过 Docker 标签和动态配置简化了反向代理的部署,特别适合容器化环境。从简单 Docker Compose 开始,逐步添加 HTTPS 和中间件。官方文档(https://doc.traefik.io/traefik/)和中文社区(如 Traefik 中国)是最佳资源。

如果需要特定场景(如 Kubernetes 集成、v2 到 v3 迁移)或代码示例,请提供更多细节!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注