go-templates - 如何在traefik前端模板中使用标签?

标签 go-templates traefik

我在 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 的文本格式。

关于go-templates - 如何在traefik前端模板中使用标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46283429/

相关文章:

docker - 未找到 Traefik Web UI 服务器

go - 模板不必要地将 `<` 转义为 `&lt;` 但不是 `>`

go - 模板 : is an incomplete or empty template

go - 如何在 Go 中对模板(不是范围)进行循环?

Go Template 范围内的额外行

android - ERR_SSL_PROTOCOL_ERROR 在特定设备上使用 Let's Encrypt

ssl - Traefik SSL 代理返回 404

Traefik 通过强制 SSL 重定向导致重定向循环过多

ssl - Traefik TLS 证书导致 curl 出现 "unknown CA"错误,适用于浏览器

javascript - 在 Javascript 中引用 Go 数组