Skip to content

Traefik Providers 概览文档

Providers 概览

Providers 是基础设施组件,包括编排器、容器引擎、云提供商或键值存储。 其思路是:Traefik 通过查询 Provider API 来发现相关的路由信息,当 Traefik 检测到变化时,便动态更新路由。

Provider 分类

虽然每个 Provider 各不相同,但你可以将每个 Provider 视为属于以下四类之一:

  • 基于 Label:每个部署的容器都附加了一组标签
  • 基于键值存储:每个部署的容器将相关信息更新到键值存储
  • 基于 Annotation:一个带 annotation 的独立对象定义容器的特征
  • 基于文件:使用文件来定义配置

Provider 命名空间

当你在 Traefik 动态配置中声明某些对象(如中间件、服务、TLS 选项或服务器传输)时,它们驻留在其 Provider 的命名空间中。 例如,如果你使用 Docker label 声明中间件,它将驻留在 Docker Provider 命名空间中。

如果你使用多个 Provider 并希望引用另一个 Provider 中声明的对象(例如引用跨 Provider 的对象,如中间件),则对象名称应使用 @ 分隔符和 Provider 名称作为后缀。

<resource-name>@<provider-name>

Kubernetes Namespace vs Traefik Namespace

由于 Kubernetes 也有自己的 namespace 概念,在跨 Provider 使用的上下文中,不应将 Provider namespace 与资源的 Kubernetes Namespace 混淆。

在这种情况下,由于 Traefik 动态配置对象的定义在 Kubernetes 中,在引用资源时指定 Kubernetes Namespace 是没有意义的。

另一方面,如果你在 Kubernetes 中将中间件声明为自定义资源并使用非 CRD 的 Ingress 对象,则必须将中间件的 Kubernetes Namespace 添加到 annotation 中,形式为 &lt;middleware-namespace&gt;-&lt;middleware-name&gt;@kubernetescrd

支持的 Provider

下表是 Traefik 当前支持的 Provider 列表:

类别Provider名称
基于编排器Dockerdocker
Docker Swarmswarm
Kubernetes Ingresskubernetesingress
Kubernetes IngressRoute (CRD)kubernetescrd
Kubernetes Gateway APIkubernetesgateway
Kubernetes Ingress NGINXkubernetesingressnginx
Knativeknative
ECSecs
Nomadnomad
Consul Catalogconsulcatalog
基于键值存储Consulconsul
etcdetcd
Redisredis
ZooKeeperzk
基于文件文件file
基于 HTTP 端点HTTPhttp

何时使用哪个 Provider

  • Docker:单机 Docker 或 Docker Compose
  • Docker Swarm:多节点 Docker 集群
  • Kubernetes IngressRoute(CRD):Kubernetes 上的推荐方式(功能最全)
  • Kubernetes Ingress:从 Ingress 兼容角度考虑
  • Kubernetes Gateway API:标准化的 Gateway API
  • Consul Catalog:HashiCorp 服务网格
  • etcd/Redis/ZooKeeper:通用键值存储

Provider 通用配置

每个 Provider 都有一些通用选项:

选项描述默认值
endpointsProvider API 端点。由 Provider 决定
username认证用户名(如果需要)。""
password认证密码(如果需要)。""
token认证令牌(如果需要)。""
tls.ca验证 Provider 服务器的 CA 证书。""
tls.cert客户端证书。""
tls.key客户端私钥。""
tls.insecureSkipVerify跳过 TLS 验证。false

启用/禁用 Provider

要在 Traefik 中启用 Provider,请按以下方式声明它:

yaml
providers:
  docker:
    enabled: true
  file:
    filename: /path/to/config.yml
  kubernetesIngress:
    enabled: true

要禁用 Provider,请将 enabled 设置为 false 或从配置中删除该 Provider。

重要

Traefik 启动时会按顺序连接每个 Provider,但配置更新是异步的。每个 Provider 独立管理其配置。


在生产环境使用 Traefik OSS?

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

基于 MIT 协议发布