跳到正文
Træfɪk

API & Dashboard

Traefik 通过 API 端点提供多种信息,例如路由器、服务、中间件等的配置。

仪表板集中展示 Traefik 当前处理的活动路由,并从此 API 获取数据。

仪表板 - 提供者
运行中的仪表板

安全性

不建议在生产环境中启用 API 和仪表板,因为这会暴露所有配置元素, 包括应仅限管理员访问的敏感数据。

在生产环境中,至少应通过认证和授权来保护它们。

提示

建议不要公开暴露 API 端口,将其限制在内部网络中 (即将最小权限原则应用到网络)。

配置示例

启用仪表板:

api: {}
[api]
--api=true

暴露仪表板:

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard
spec:
  routes:
  - match: Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))
    kind: Rule
    services:
    - name: api@internal
      kind: TraefikService
    middlewares:
      - name: auth
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: auth
spec:
  basicAuth:
    secret: secretName # Kubernetes secret named "secretName"
# Create an IngressRoute for the dashboard
ingressRoute:
  dashboard:
    enabled: true
    # Custom match rule with host domain
    matchRule: Host(`traefik.example.com`)
    entryPoints: ["websecure"]
    # Add custom middlewares : authentication and redirection
    middlewares:
      - name: traefik-dashboard-auth

# Create the custom middlewares used by the IngressRoute dashboard (can also be created in another way).
# /!\ Yes, you need to replace "changeme" password with a better one. /!\
extraObjects:
  - apiVersion: v1
    kind: Secret
    metadata:
      name: traefik-dashboard-auth-secret
    type: kubernetes.io/basic-auth
    stringData:
      username: admin
      password: changeme

  - apiVersion: traefik.io/v1alpha1
    kind: Middleware
    metadata:
      name: traefik-dashboard-auth
    spec:
      basicAuth:
        secret: traefik-dashboard-auth-secret
# Dynamic Configuration
labels:
  - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  - "traefik.http.routers.dashboard.service=api@internal"
  - "traefik.http.routers.dashboard.middlewares=auth"
  - "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
# Dynamic Configuration
deploy:
  labels:
    - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
    - "traefik.http.routers.dashboard.service=api@internal"
    - "traefik.http.routers.dashboard.middlewares=auth"
    - "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
    # Dummy service for Swarm port detection. The port can be any valid integer value.
    - "traefik.http.services.dummy-svc.loadbalancer.server.port=9999"
# Dynamic Configuration
- "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
# Dynamic Configuration
http:
  routers:
    dashboard:
      rule: Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))
      service: api@internal
      middlewares:
        - auth
  middlewares:
    auth:
      basicAuth:
        users:
          - "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
          - "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"
# Dynamic Configuration
[http.routers.my-api]
  rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  service = "api@internal"
  middlewares = ["auth"]

[http.middlewares.auth.basicAuth]
  users = [
    "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
    "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
  ]

配置选项

可通过以下方式配置 API 和仪表板:

  • 在 Helm Chart 中:可在此处找到自定义 Traefik 安装、 启用仪表板的选项。
  • 在 Traefik 静态配置中,具体如下。
字段 说明 默认值 必填
api 启用 API/仪表板。设为 true 时,其子选项 api.dashboard 也会设为 true。 false 否
api.basePath 定义 API 和仪表板对外提供访问的基础路径。
请注意,此选项与不安全模式不兼容。
/ 否
api.dashboard 启用仪表板。 true 否
api.debug 启用用于调试和性能分析的额外端点。 false 否
api.disableDashboardAd 禁用仪表板中的广告。 false 否
api.insecure 在名为 traefik 的入口点上启用 API 和仪表板。
请注意,此模式与自定义 API 基础路径选项不兼容。
false 否

端点

以下所有端点都必须通过 HTTP GET 请求访问。

路径 说明
/api/http/routers 列出所有 HTTP 路由器的信息。
/api/http/routers/{name} 返回 name 指定的 HTTP 路由器的信息。
/api/http/services 列出所有 HTTP 服务的信息。
/api/http/services/{name} 返回 name 指定的 HTTP 服务的信息。
/api/http/middlewares 列出所有 HTTP 中间件的信息。
/api/http/middlewares/{name} 返回 name 指定的 HTTP 中间件的信息。
/api/tcp/routers 列出所有 TCP 路由器的信息。
/api/tcp/routers/{name} 返回 name 指定的 TCP 路由器的信息。
/api/tcp/services 列出所有 TCP 服务的信息。
/api/tcp/services/{name} 返回 name 指定的 TCP 服务的信息。
/api/tcp/middlewares 列出所有 TCP 中间件的信息。
/api/tcp/middlewares/{name} 返回 name 指定的 TCP 中间件的信息。
/api/udp/routers 列出所有 UDP 路由器的信息。
/api/udp/routers/{name} 返回 name 指定的 UDP 路由器的信息。
/api/udp/services 列出所有 UDP 服务的信息。
/api/udp/services/{name} 返回 name 指定的 UDP 服务的信息。
/api/entrypoints 列出所有入口点的信息。
/api/entrypoints/{name} 返回 name 指定的入口点的信息。
/api/overview 返回有关 HTTP、TCP 以及已启用功能和提供者的统计信息。
/api/support-dump 返回包含匿名化静态配置和运行时配置的归档文件。
/api/rawdata 返回有关动态配置、错误、状态和依赖关系的信息。
/api/version 返回 Traefik 版本信息。
/debug/vars 参阅 Go 的 expvar 文档。
/debug/pprof/ 参阅 Go 的 pprof Index 文档。
/debug/pprof/cmdline 参阅 Go 的 pprof Cmdline 文档。
/debug/pprof/profile 参阅 Go 的 pprof Profile 文档。
/debug/pprof/symbol 参阅 Go 的 pprof Symbol 文档。
/debug/pprof/trace 参阅 Go 的 pprof Trace 文档。

基础路径配置

默认情况下,Traefik 在 / 基础路径下暴露 API 和仪表板。可以通过 api.basePath 配置此路径。配置后,所有端点(api、dashboard、debug)都使用该路径。

仪表板

仪表板默认通过 /dashboard/ 路径访问。

说明

  • /dashboard/ 中末尾的斜杠 / 是必需的。可以使用 RedirectRegex 中间件缓解这一限制。
  • 此外,路径 / 会重定向到 /dashboard/,但不应依赖此行为,因为它可能发生变化,也可能使路由规则变复杂。

如上文安全性一节所述,必须保护仪表板和 API 的访问。 需要在 Traefik 中定义路由配置。 这需要设置附加到 api@internal 服务的路由器,以便:

仪表板路由器规则

为确保正确访问仪表板,定义的路由器规则必须匹配针对 /api 和 /dashboard 路径的请求。 建议使用基于 Host 的规则匹配目标域名上的所有请求,或显式定义同时包含两个路径前缀的规则。 以下是一些示例:

# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`)"
# The dashboard can be accessed on http://example.com/dashboard/ or http://traefik.example.com/dashboard/
rule = "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"

在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。

为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证