在traefik.toml与容器arg

时间:2017-07-05 16:04:03

标签: kubernetes traefik

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

[kubernetes]
  labelselector = "expose=internal"

当我在此配置中检查traefik状态页面时,我会看到列出的所有入口,而不仅仅是那些带有标签" expose:internal"定义

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

- --kubernetes.labelselector=expose=internal

根据Kubernetes Ingress Backend文档,Labels and Selectors的标签选择器部分中有效的任何标签选择器格式应在traefik.toml文件中有效。我已经尝试过使用相等的baed(如上所示)和基于set的(以确定是否只存在" expose"标签),两者都没有在toml中工作。基于集合似乎不适用于容器args,但是相等的语句可以。

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

3 个答案:

答案 0 :(得分:2)

正如您已经发现的那样,不通过--kubernetes会使事情对您有用。原因是此参数不仅启用了Kubernetes提供程序,还设置了所有默认值。 As documented,命令行参数优先于配置文件;因此,TOML文件中指定的任何非默认Kubernetes参数都将被--kubernetes隐含的默认值覆盖。这是(虽然没有理想的记录)行为。

您仍然可以通过省略--kubernetes来混合和匹配Kubernetes(或任何其他提供者)的命令行和TOML配置参数。例如,您可以拥有示例TOML文件

[kubernetes]
  labelselector = "expose=internal"

然后像

一样调用Traefik
./traefik --configfile=config.yaml --kubernetes.namespaces=other

这会导致Traefik同时使用自定义标签选择器expose=internal并观察名称空间other

我有submitted a PR来澄清命令行提供程序启用参数与提供程序默认值的关系。

答案 1 :(得分:1)

实际上,标志优先于toml config。这里记录了http://docs.traefik.io/basics/#static-trfik-configuration:)

答案 2 :(得分:0)

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

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

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