我正在将 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 模板的文档。
换句话说,我想知道支持以下哪一项:
version: "3.7"
services:
whoami:
image: "containous/whoami"
environment:
- VALUE='{{.Name}}'
- NAME_{{.Name}}='NAME'
deploy:
labels:
- value={{.Name}}
- name_{{.Name}}=NAME
networks:
- {{.Name}}
Run Code Online (Sandbox Code Playgroud)