Prometheus IPv6失败,并显示“连接:无效参数”

时间:2019-08-19 09:07:35

标签: ipv6 prometheus prometheus-node-exporter

我当前正在尝试设置必须使用IPv6的内部Prometheus监视系统。我的静态配置却无法正常工作:

- targets: ['[fe80::3086:7bff:fed8:f402]:9100']

这失败,并显示错误

获取http://[fe80::3086:7bff:fed8:f402]:9100/metrics:拨打tcp [fe80 :: 3086:7bff:fed8:f402]:9100:connect:无效参数


我尝试使用CURL来查看是否可以连接到运行node-exporter的远程服务器。

这不起作用:curl -g -6 'http://[fe80::3086:7bff:fed8:f402]:9100/metrics'

但这确实可行:curl -g -6 'http://[fe80::3086:7bff:fed8:f402%ens17]:9100/metrics'

这表明我实际上可以连接到服务器,但必须添加将IPv6网络顶部连接到URL的网络接口。老实说,我不知道为什么。

但是现在,相同的URL不能用于普罗米修斯,但仍然存在错误:

- targets: ['[fe80::3086:7bff:fed8:f402%ens17]:9100']

Get http://[fe80::3086:7bff:fed8:f402%25ens17]:9100/metrics: dial tcp [fe80::3086:7bff:fed8:f402%ens17]:9100: connect: invalid argument

1 个答案:

答案 0 :(得分:1)

由于使用的是IPv6本地链接地址,因此必须添加区域ID(在您的情况下为%ens17),以说明接口的含义。每个接口都将具有相同的本地链路网络,因此您必须区分哪个接口,而区域ID会为您做到这一点。

这在几个RFC中都有详细说明。您至少应该熟悉RFC 2732, Format for Literal IPv6 Addresses in URL'sRFC 4007, IPv6 Scoped Address ArchitectureRFC 6874, Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers


不幸的是,似乎并非一切都赶上了这一步,%通常被用作转义字符。您真正应该做的就是为您的主机分配ULA寻址(fc00::/7)。将L的位设置为一个(fd00::/8,然后选择一个随机的40位全局ID(fdxx:xxxx:xxxx:xxxx::/64),然后从派生的前缀中为主机分配地址。如果您有多个网络,则可以使用相同的方法为每个网络获取前缀,并且可以在自己的站点内路由ULA寻址(与Link-Local寻址不同)。

RFC 4193, Unique Local IPv6 Unicast Addresses解释了IPv6 ULA寻址。