一些小兵位于 NAT 后面,我想获取主兵看到的它们的公共 IP 地址(出于防火墙目的)。
有 external_ip 粒度,但据我所知,它依赖于第三方服务,甚至对我来说不能可靠地工作。
答案1
首先确保您的每个 minion 都已curl
安装软件包。
然后你可以使用:
salt '*' cmd.run "curl ifconfig.me"
如果 ifconfig.me 没有响应,您可以使用其他提供商:
salt '*' cmd.run "curl -s icanhazip.com"
每个 minion 都会响应外部 ip 地址:
zeus.example.com:
1.2.3.1
hera.example.com:
1.2.3.2
apollo.example.com:
1.2.3.3
athena.example.com:
1.2.3.4
如果未安装 curl,则响应将是:
castor.example.com:
/bin/bash: curl: command not found
答案2
NAT 后面的计算机不知道它应该拥有的公共 IP 地址...我认为您无法从 minion 本身获取此信息。
此信息必须来自您的 NAT 设备,无论是防火墙、交换机还是其他设备。也许您可以在 salt 中创建一个 Runner 来为您检索该信息。
或者,您可以简单地在您的 minion 的文件系统中放入一个包含诸如公共 IP 地址之类的信息的文件,这样可以更轻松地检索这些信息......