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 中,形式为 <middleware-namespace>-<middleware-name>@kubernetescrd。
支持的 Provider
下表是 Traefik 当前支持的 Provider 列表:
| 类别 | Provider | 名称 |
|---|---|---|
| 基于编排器 | Docker | docker |
| Docker Swarm | swarm | |
| Kubernetes Ingress | kubernetesingress | |
| Kubernetes IngressRoute (CRD) | kubernetescrd | |
| Kubernetes Gateway API | kubernetesgateway | |
| Kubernetes Ingress NGINX | kubernetesingressnginx | |
| Knative | knative | |
| ECS | ecs | |
| Nomad | nomad | |
| Consul Catalog | consulcatalog | |
| 基于键值存储 | Consul | consul |
| etcd | etcd | |
| Redis | redis | |
| ZooKeeper | zk | |
| 基于文件 | 文件 | file |
| 基于 HTTP 端点 | HTTP | http |
何时使用哪个 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 都有一些通用选项:
| 选项 | 描述 | 默认值 |
|---|---|---|
endpoints | Provider API 端点。 | 由 Provider 决定 |
username | 认证用户名(如果需要)。 | "" |
password | 认证密码(如果需要)。 | "" |
token | 认证令牌(如果需要)。 | "" |
tls.ca | 验证 Provider 服务器的 CA 证书。 | "" |
tls.cert | 客户端证书。 | "" |
tls.key | 客户端私钥。 | "" |
tls.insecureSkipVerify | 跳过 TLS 验证。 | false |
启用/禁用 Provider
要在 Traefik 中启用 Provider,请按以下方式声明它:
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 的商业支持。