如何在traefik前端模板中使用标签?
How to use tags in traefik front-end template?
我在 Consul Catalog 中使用标签声明了服务,并且通过正确配置 Traefik,这些服务在 traefik 中可见(认为它有效,我已经测试过了)。
这些服务通过服务层的环境变量在Consul中声明了标签。我通常在某些服务上有版本标签,在其他服务上有单元标签。
我想让 traefik 在 URL 上代理我的服务,形式如下
http://{version}.{unit].{service}.{domain}/
我已经有了默认的工作模板 Host:{{.ServiceName}}.{{.Domain}}
所以我想我可以通过将其更改为 Host:{{getTag("BU", tags, "white")}}.{{.ServiceName}}.{{.Domain}}
来添加我的单位标签。但是当我这样做时,我会收到大量错误消息
"Error creating route for frontend a-frontend: error parsing rule: Empty rule"
即使是前端映射服务有单元标签定义。
那么,考虑到我就像 Jon Snow(我对 go 模板一无所知),我该如何让它工作?
假设我在我的服务上定义了 version
标签。这个 version
标签在 Consul 中是可见的。在 traefik 中,这个标签将在 Attributes
"map".
中可见
因此,我可以在 frontEndRule 中使用以下代码
frontEndRule = Host:{{if hasTag "version" .Attributes}}{{getTag "version" .Attributes ""}}.{{end}}{{.ServiceName}}.{{.Domain}}
请注意,方法调用不使用类似 C 的文本格式。
我在 Consul Catalog 中使用标签声明了服务,并且通过正确配置 Traefik,这些服务在 traefik 中可见(认为它有效,我已经测试过了)。
这些服务通过服务层的环境变量在Consul中声明了标签。我通常在某些服务上有版本标签,在其他服务上有单元标签。
我想让 traefik 在 URL 上代理我的服务,形式如下
http://{version}.{unit].{service}.{domain}/
我已经有了默认的工作模板 Host:{{.ServiceName}}.{{.Domain}}
所以我想我可以通过将其更改为 Host:{{getTag("BU", tags, "white")}}.{{.ServiceName}}.{{.Domain}}
来添加我的单位标签。但是当我这样做时,我会收到大量错误消息
"Error creating route for frontend a-frontend: error parsing rule: Empty rule"
即使是前端映射服务有单元标签定义。
那么,考虑到我就像 Jon Snow(我对 go 模板一无所知),我该如何让它工作?
假设我在我的服务上定义了 version
标签。这个 version
标签在 Consul 中是可见的。在 traefik 中,这个标签将在 Attributes
"map".
因此,我可以在 frontEndRule 中使用以下代码
frontEndRule = Host:{{if hasTag "version" .Attributes}}{{getTag "version" .Attributes ""}}.{{end}}{{.ServiceName}}.{{.Domain}}
请注意,方法调用不使用类似 C 的文本格式。