Traefik 的配置发现是通过提供者实现的。
提供者是现有的基础设施组件,无论是协调器、容器引擎、云供应商还是键值存储。 整体思路是 Traefik 将查询提供者的 API,以找到有关路由的相关信息,每次 Traefik 检测到一个变化,它动态更新路由。
部署然后忘记是 Traefik 的信条。
即使每个提供者是不同的,也可以将它们分为四组:
以下是 Traefik 目前支持的提供者名单。
Provider | Type | Configuration Type |
---|---|---|
Docker | Orchestrator | Lable |
Kubernetes | Orchestrator | Custom Resource |
Marathon | Orchestrator | Label |
Rancher | Orchestrator | label |
File | Manual | TOML/YAML format |
当前版本的 Traefik 并不支持所有的提供者。 有关更多提供者,请参阅以前的版本(v1.7)。
在某些情况下,一些提供者可能会突然发生大量的更改,这将产生大量的配置更改事件。 如果 Traefik 将它们都考虑在内,那么将触发更多的配置重载,而不是必需的,甚至不是有用的。
为了减轻这种情况,可以设置 providers.providersThrottleDuration
选项。 这是 Traefik 在重新加载配置之后,在考虑任何新的配置刷新事件之前等待的持续时间。 如果任何事件在此期间到达,则只考虑最近的事件,并删除所有以前的事件。
不能为每个提供者设置此选项,但节流算法独立应用于每个提供者。 默认为2秒。
providers:
providersThrottleDuration: 10s
默认情况下,Traefik 将为所有检测到的容器创建路由。
如果你想限制 Traefik 的服务发现范围,比如不允许为某些容器创建路由,可以通过两种不同的方式来实现:
exposedByDefault
支持此特性的提供者:
支持此特性的提供者:
Traefik 过去只通过 Kubernetes Ingress 提供者支持 Kubernetes,严格意义上就是 Kubernetes Ingress 控制器。
然而,由于社区表示需要从 Traefik 特性中获益,而不需要求助于(大量)注释,我们最终为 IngressRoute 类型编写了一个自定义资源定义(下文中的别名 CRD) ,以便提供更好的方式来配置对 Kubernetes 集群的访问。
请参阅路由中的专用部分。
可选,默认为empty
providers:
kubernetesCRD:
endpoint = "http://localhost:8080"
# ...
Kubernetes服务的端点作为 URL。
部署到 Kubernetes 后,Traefik 将读取环境变量 KUBERNETES_SERVICE_HOST
和 KUBERNETES_SERVICE_PORT
或 KUBECONFIG
来构造端点。
访问令牌将在 /var/run/secrets/kubernetes.io/serviceaccount/token
中查找,SSL CA 证书将在 /var/run/secrets/kubernetes.io/serviceaccount/CA
中查找。在部署到kubernetes集群中时,两者都会自动挂载。
可以指定端点来重写群集内的环境变量值。
当找不到环境变量时,Traefik 将尝试使用集群外的客户端连接到 Kubernetes API 服务器。 在这种情况下,端点是必须的。 具体来说,可以将它设置为 kubectl proxy
使用的 URL,以使用授予的相关 kubeconfig 的身份验证和授权连接到 Kubernetes 集群。
可选,默认为empty
providers:
kubernetesCRD:
token = "mytoken"
# ...
用于 Kubernetes 客户端配置的承载令牌。
可选,默认为empty
providers:
kubernetesCRD:
certAuthFilePath: "/my/ca.crt"
# ...
证书颁发机构文件的路径。用于 Kubernetes 客户端配置。
可选,默认为all namespaces(一个空的数组)
providers:
kubernetesCRD:
namespaces:
- "default"
- "production"
# ...
要监视的namespace数组。
可选,默认为empty(处理所有的Ingresses)
providers:
kubernetesCRD:
labelselector: "A and not B"
# ...
默认情况下,Traefik 处理已配置namespace中的所有Ingress对象。 可以定义一个标签选择器,以便只对特定的Ingress对象进行筛选。
可选,默认为empty
providers:
kubernetesCRD:
ingressClass: "traefik-internal"
# ...
标识要处理的Ingress对象的 kubernetes.io/Ingress.class
注释值。
如果参数是非空的,则只处理包含具有相同值的注释的Ingress。 否则,将处理没有注释、具有空值或值为traefik的Ingress。
可选,默认为0(不节流)
providers:
kubernetesCRD:
throttleDuration: "10s"
# ...