Traefik:63,229 星的云原生反向代理 2026 版

Traefik 是自动发现服务的反向代理。Docker、K8s 集成。TLS 自动获取、中间件、负载均衡。

  • ⭐ 63229
  • Go
  • MIT
  • 更新于 2026-05-19

什么是 Traefik? #

Traefik 是云原生反向代理。自动发现 Docker、Kubernetes 服务。无需手动配置,0 停机更新路由。

安装 #

Docker #

version: "3.8"
services:
  traefik:
    image: traefik:v3.2
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlsresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.mytlsresolver.acme.httpchallenge.entrypoints=web"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

Kubernetes Helm #

helm repo add traefik https://traefik.github.io/charts
helm install traefik traefik/traefik

入门指南 #

1. 启动 Traefik #

docker run -d -p 80:80 -p 443:443 -p 8080:8080 \
  --name traefik \
  -v /var/run/docker.sock:/var/run/docker.sock \
  traefik:v3.2

2. 添加标签 #

services:
  webapp:
    image: nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.web.rule=Host(`localhost`)"
      - "traefik.http.routers.web.entrypoints=web"

3. 访问面板 #

访问 http://localhost:8080 查看 Traefik 面板。

核心概念 #

组件说明
Entrypoint监听端口(80、443)
Router路由规则
Middleware中间件(重定向、压缩)
Service后端服务
Provider服务发现(Docker、K8s)

路由配置 #

基本路由 #

labels:
  - "traefik.http.routers.my-router.rule=Host(`example.com`)"
  - "traefik.http.routers.my-router.service=my-service"

路径路由 #

labels:
  - "traefik.http.routers.api.rule=Host(`api.example.com`) && PathPrefix(`/v1`)"

匹配器 #

  • Host():主机匹配
  • Path():路径匹配
  • Headers():头部匹配
  • Query():查询参数匹配

中间件 #

重定向 #

labels:
  - "traefik.http.middlewares.redirect-to-https.redirectschemescheme=https"
  - "traefik.http.routers.http_router.middlewares=redirect-to-https"

基于路径的重写 #

labels:
  - "traefik.http.middlewares.stripprefix.stripPrefix.prefixes=/api"

访问控制 #

labels:
  - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/"

TLS/HTTPS #

自动证书 #

labels:
  - "traefik.http.routers.web.tls.certresolver=myresolver"

完整配置 #

http:
  certResolvers:
    myresolver:
      acme:
        email: admin@example.com
        storage: acme.json
        httpChallenge: {}

Kubernetes 高级 #

IngressRoute #

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: web-route
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`web.example.com`)
    kind: Rule
    services:
    - name: web-service
      port: 80
  tls:
    certResolver: myresolver

Middleware CRD #

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: rate-limit
spec:
  rateLimit:
    average: 100
    burst: 50

观察与监控 #

Prometheus 指标 #

additionalArguments:
  - "--metrics.prometheus=true"
  - "--metrics.prometheus.entrypoints=websecure"

Datadog #

metrics:
  prometheus:
    entryPoints:
      - websecure
    service: true

性能优化 #

连接池 #

providers:
  docker:
    exposedByDefault: false
    network: proxy
    watch: true

静态配置 #

log:
  level: ERROR

accessLog:
  format: json

常见问题 #

Q: Traefik 会产生性能开销吗?

答:很小。Go 语言实现,基准测试显示 ~15ms 延迟。

Q: 如何支持 WebSocket?

答:Traefik 原生支持。无需额外配置。

Q: 如何排查问题?

答:查看日志、面板、Prometheus 指标。

总结 #

Traefik 把「服务发现 + 反向代理」变成「一行标签搞定」。Docker + K8s 的必备利器。


参考:doc.traefik.io 官方文档 更新:2026-05-19

💬 留言讨论