我目前正在尝试建立一个必须使用IPv6的内部Prometheus监控系统。但是,我的静态配置不起作用:
- targets: ['[fe80::3086:7bff:fed8:f402]:9100']这与错误失败。
获取http://[fe80::3086:7bff:fed8:f402]:9100/metrics:拨号tcp fe80:3086:7bff:fed8 8:f 402:9100: connect:无效参数
我尝试使用CURL来查看是否可以连接到节点导出程序运行的远程服务器。
这不管用: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不适用于prometheus,它仍然存在一个错误:
- 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发布于 2019-08-19 13:30:58
由于您使用的是IPv6链接-本地寻址,您必须添加区域ID (在您的情况下是%ens17)来解释哪个接口是指哪个接口。每个接口都有相同的,所以您必须区分哪个接口,区域ID为您完成这个任务。
这一点在几个RFCs中得到了详细说明。您至少应该熟悉RFC 2732,网址中文字IPv6地址的格式、RFC 4007,IPv6作用域地址体系结构和RFC 6874,表示地址文字和统一资源标识符中的IPv6区域标识符。
不幸的是,并不是所有的事情似乎都已经解决了这个问题,而%经常被用作转义字符。您真正应该做的是将ULA寻址(fc00::/7)分配给主机。将L位设置为1 (fd00::/8),然后选择一个随机的40位全局ID (fdxx:xxxx:xxxx:xxxx::/64),并从您派生的前缀中为您的主机分配地址。如果您有多个网络,您可以使用相同的方法为每个网络获取一个前缀,并且可以在您自己的站点内路由ULA寻址(不像)。
RFC 4193,唯一的本地IPv6单播地址解释IPv6 ULA地址。
https://stackoverflow.com/questions/57553577
复制相似问题