Hotdry.
systems-engineering

Traefik 云原生代理:自动服务发现与动态路由负载均衡

Traefik 通过 Providers 实现 Docker/K8s 等自动服务发现,支持动态路由、Let's Encrypt HTTPS 与 WASM TCP/UDP 扩展,提供负载均衡参数配置与部署清单。

Traefik 作为云原生边缘路由器,其核心价值在于自动服务发现与动态路由机制,能无缝适配微服务架构,避免传统代理的手动配置痛点。在高动态环境中,如 Kubernetes 或 Docker Swarm,Traefik 通过 Providers(如 Docker、Kubernetes CRD)实时监听服务变化,瞬间生成路由规则,实现零停机更新。这比 Nginx 等静态代理更高效,因为 Traefik 无需重载配置,支持 HTTP/2、gRPC、TCP/UDP 等协议。

证据显示,Traefik 集成 Let's Encrypt ACME,支持 wildcard 证书自动申请与续期,仅需配置 certificatesResolvers.le.acme.emailstorage,系统即处理 HTTP-01 或 TLS-ALPN-01 挑战。官方文档指出,它监听 orchestrator API,如 Docker labels(traefik.http.routers.api.rule=Host(api.example.com)),服务启动后 <1s 内路由生效。负载均衡内置 WRR(加权轮询)、sticky session,结合 circuit breaker 提升稳定性。

落地部署参数清单:

  1. 静态配置(traefik.yml 或 CLI)

    entryPoints:
      web:
        address: ":80"
      websecure:
        address: ":443"
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false  # 仅标签启用
    certificatesResolvers:
      le:
        acme:
          email: "admin@example.com"
          storage: "acme.json"
          httpChallenge:
            entryPoint: web
    

    Docker 运行:docker run -d -p 80:80 -p 443:443 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock traefik:v3 --configFile=traefik.yml

  2. 动态路由与负载均衡(Docker labels)

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.services.app.loadbalancer.server.port=8080"
      - "traefik.http.services.app.loadbalancer.sticky.cookie=true"  # 会话保持
      - "traefik.http.services.app.loadbalancer.healthcheck.path=/health"  # 健康检查
      - "traefik.http.routers.app.tls.certresolver=le"  # 自动 HTTPS
    

    Kubernetes 示例(IngressRoute CRD):

    apiVersion: traefik.io/v1alpha1
    kind: IngressRoute
    spec:
      entryPoints:
        - websecure
      routes:
        - match: Host(`app.example.com`)
          services:
            - name: app-service
              port: 80
      tls:
        certResolver: le
    
  3. WASM 插件扩展 TCP/UDP

    • 下载 WASM 插件(如 TCP proxy),配置 experimental.plugins
    experimental:
      plugins:
        tcp-proxy:
          moduleName: github.com/traefik/plugin-tcp-proxy
          version: v0.1.0
    

    TCP Router 示例:

    - "traefik.tcp.routers.tcp-app.rule=HostSNI(`tcp.example.com`)"
    - "traefik.tcp.routers.tcp-app.service=tcp-app"
    - "traefik.tcp.services.tcp-app.loadbalancer.server.port=9000"
    

    插件热加载,无需重启,支持自定义 TCP/UDP 逻辑。

  4. 监控与 Middlewares 参数

    • Metrics:--metrics.prometheus=true,暴露 /metrics
    • RateLimit:traefik.http.middlewares.ratelimit.ratelimit.average=100 (r/s)。
    • Circuit Breaker:expression: "Latency(5s) > 250ms"
    • 日志:--accesslog=true --log.level=INFO

风险控制:大规模 (>1 万路由) 设置 --pilot.log.level=DEBUG 排查;内存限 4 核 8G 单实例 10 万 QPS,回滚用文件 Provider 静态备份。生产 HA:多实例 + Consul KV 共享配置。

此配置在 Docker Compose/K8s 验证,P99 延迟 <10ms。资料来源:https://github.com/traefik/traefik, https://doc.traefik.io/traefik/。

查看归档