Rob*_*cco 6 docker docker-swarm traefik
我正在将 traefik 2.0 与 docker 提供程序(群模式)一起使用,并且我希望为在 traefik 上发布自身的服务提供默认方式,以避免冲突。
我设法创建了一个满足我的需求的默认规则,但我现在很挣扎,因为我没有找到一种方法来提供默认中间件来去除前缀。
有没有一种方法可以添加 docker 服务标签,而无需提供特定的路由器名称,但仍然向 traefik 隐式创建的任何路由器添加中间件?或者有没有办法像默认规则一样定义默认中间件?
我试图实现的解决方案是删除以下标签中的所有变量替换,从而减少整个定义的冗长性,但又不会让自己陷入命名冲突:
- traefik.enable=true
- traefik.http.services.${ENV:-dev}_${STACK}_whoami.loadbalancer.server.port=80
- traefik.http.middlewares.${ENV:-dev}_${STACK}_whoami.stripprefix.prefixes=/${STACK}
- traefik.http.routers.${ENV:-dev}_${STACK}_whoami.entrypoints=http
- traefik.http.routers.${ENV:-dev}_${STACK}_whoami.rule=PathPrefix(`/${STACK}/whoami`)
- traefik.http.routers.${ENV:-dev}_${STACK}_whoami.middlewares=${ENV:-dev}_${STACK}_whoami@docker
Run Code Online (Sandbox Code Playgroud)
希望它可以变成如下所示,default在部署堆栈时使用 Docker 分配的隐式服务名称的魔力在哪里:
- traefik.enable=true
- traefik.http.services.default.loadbalancer.server.port=80
- traefik.http.middlewares.default.stripprefix.prefixes=/${STACK}
- traefik.http.routers.default.entrypoints=http
- traefik.http.routers.default.rule=PathPrefix(`/${STACK}/whoami`)
- traefik.http.routers.default.middlewares=default@docker
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作,但显然 go 模板没有被替换:
- traefik.enable=true
- traefik.http.services.{{ .Name }}.loadbalancer.server.port=80
- traefik.http.middlewares.{{ .Name }}.stripprefix.prefixes=/${STACK}
- traefik.http.routers.{{ .Name }}.entrypoints=http
- traefik.http.routers.{{ .Name }}.rule=PathPrefix(`/${STACK}/whoami`)
- traefik.http.routers.{{ .Name }}.middlewares={{ .Name }}@docker
Run Code Online (Sandbox Code Playgroud)
我没有测试它,但根据这个文档,Go 模板仅在动态(Yaml/Toml)配置文件中受支持。
所以我建议你尝试添加一个动态配置文件(请参阅此处)并编写如下内容:
http:
routers:
{{range $i, $e := until 100 }}
router{{ $e }}:
middlewares = {{ $e }}
{{end}}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |