文件¶
文件提供者允许你在 YAML 或 TOML 文件中定义安装配置。
它支持通过单个配置文件或多个独立文件提供配置。
提示
在整套文档中,文件提供者是展示众多功能配置示例时使用的默认格式。
提示
文件提供者很适合复用其他提供者中的通用元素,例如声明允许列表中间件、基本身份验证等。
配置示例¶
可以按以下方式启用文件提供者:
providers:
file:
directory: "/path/to/dynamic/conf"[providers.file]
directory = "/path/to/dynamic/conf"--providers.file.directory=/path/to/dynamic/conf声明路由器、中间件和服务:
http:
# Add the router
routers:
router0:
entryPoints:
- web
middlewares:
- my-basic-auth
service: service-foo
rule: Path(`/foo`)
# Add the middleware
middlewares:
my-basic-auth:
basicAuth:
users:
- test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/
- test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0
usersFile: etc/traefik/.htpasswd
# Add the service
services:
service-foo:
loadBalancer:
servers:
- url: http://foo/
- url: http://bar/
passHostHeader: false[http]
# Add the router
[http.routers]
[http.routers.router0]
entryPoints = ["web"]
middlewares = ["my-basic-auth"]
service = "service-foo"
rule = "Path(`/foo`)"
# Add the middleware
[http.middlewares]
[http.middlewares.my-basic-auth.basicAuth]
users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
"test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
usersFile = "etc/traefik/.htpasswd"
# Add the service
[http.services]
[http.services.service-foo]
[http.services.service-foo.loadBalancer]
[[http.services.service-foo.loadBalancer.servers]]
url = "http://foo/"
[[http.services.service-foo.loadBalancer.servers]]
url = "http://bar/"配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
providers.providersThrottleDuration |
配置重新加载后,在接受新的配置刷新事件之前至少等待的时间。 如果在此期间发生多个事件,只处理最新的事件,其余事件全部丢弃。 此选项无法为每个提供者单独设置,但节流算法会独立作用于各个提供者。 |
2s | 否 |
providers.file.filename |
定义配置文件的路径。 | "" | 是 |
providers.file.directory |
定义包含配置文件的目录路径。filename 与 directory 选项互斥。建议使用 directory。 |
"" | 是 |
providers.file.watch |
将 watch 选项设置为 true,允许 Traefik 自动监听文件变更。此选项同时适用于 filename 和 directory。 |
true | 否 |
providers.file.debugLogGeneratedTemplate |
启用所生成配置模板的调试日志。 | false | 否 |
限制
使用文件提供者时,Traefik 会监听文件系统通知,以更新动态配置。
如果在编排器(例如 docker 或 kubernetes)中使用挂载或绑定的文件系统,文件的链接方式可能引发错误。 如果文件系统之间的链接断开,源文件或目录被修改或重命名时,关联的文件或目录不会收到任何通知,因此既不会触发,也无法捕获文件系统通知。
例如在 Docker 中,如果宿主机上的文件被重命名,到挂载文件的链接就会断开,容器中的文件也不再更新。 为避免此类问题,建议:
- 将 Traefik 的 directory 配置设置为父目录
- 挂载或绑定该父目录
由于监听所有文件系统通知非常困难,Traefik 使用 fsnotify。 如果使用挂载目录中的目录仍无法解决问题,请检查文件系统与 fsnotify 的兼容性。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。