3

我有一个 traefik.toml 文件定义为我的 traefik configmap 的一部分。下面的片段是定义了 labelselector 的 kubernetes 端点配置:

[kubernetes]
  labelselector = "expose=internal"

当我检查此配置中的 traefik 状态页面时,我看到列出了所有入口,而不仅仅是那些定义了标签“公开:内部”的入口。

但是,如果我将 kubernetes.labelselector 设置为我的部署的容器参数,则只有具有匹配标签的入口会按预期显示在 traefik 状态页面上:

- --kubernetes.labelselector=expose=internal

根据Kubernetes Ingress Backend文档,任何在标签和选择器的标签选择器部分有效的标签选择器格式都应该在 traefik.toml 文件中有效。我已经尝试了相等性(如上所示)和基于集合(以确定是否存在“暴露”标签,仅),这两种方法都没有在 toml.xml 中起作用。基于集合的方法似乎在容器 args 中不起作用,但相等语句可以。

我假设存在一些与我在 traefik.toml 文件中格式化 kubernetes 端点的方式有关的问题。在向 github 报告此问题之前,我希望有人可以澄清文档和/或纠正我在 toml 文件格式中犯的任何错误。

4

3 回答 3

2

正如您已经发现的那样,不通过--kubernetes会让事情对您有用。原因是此参数不仅启用了 Kubernetes 提供程序,而且还设置了所有默认值。如文档所述,命令行参数优先于配置文件;因此,在 TOML 文件中指定的任何非默认 Kubernetes 参数都将被通过--kubernetes. 这是预期的(尽管没有理想地记录)行为。

您仍然可以通过省略--kubernetes. 例如,您可以拥有示例 TOML 文件

[kubernetes]
  labelselector = "expose=internal"

然后像调用 Traefik

./traefik --configfile=config.yaml --kubernetes.namespaces=other

这将导致 Traefik 使用自定义标签选择器expose=internal和观察命名空间other

我已提交 PR以阐明命令行提供程序启用参数与提供程序默认值有关的行为。

于 2017-07-05T21:27:41.290 回答
1

事实上,标志优先于 toml 配置。它记录在这里http://docs.traefik.io/basics/#static-trfik-configuration :)

于 2017-07-05T20:57:41.273 回答
0

问题似乎是命令行参数和 toml 选项的混合和匹配。

在阅读了一些错误报告和一些额外的杂项之后。文档我意识到我们已经启用了 kubernetes 后端将--kubernetes参数传递给 traefik 容器。我意识到在 toml 中定义[kubernetes]也启用了 kubernetes 后端。我预感删除了命令行参数并将完整的 kubernetes 后端配置放入 toml 中,一切都按预期工作。

我不确定这是否是预期的行为,但这种行为似乎表明它的设计方式是在提供重复选项时命令行参数优先于 toml 配置选项。

于 2017-07-05T17:51:44.337 回答