注意:我们使用傀儡独立(无主)即傀儡申请。
通常,在部署Web应用程序时,会在前端应用程序后面运行一些后端服务和应用程序,例如数据库,search服务器,caching服务器和其他内部服务等。这些服务不需要监听在公共networking接口上。 相反,他们可以在专用networking接口上监听,所有的应用程序都可以通过安全的方式进行通信 这是我已经做的事情。
当您想要自动部署这些服务时,就会出现这个问题。 我们使用Puppet进行下一代configuration。 当这些服务被部署时,我们依靠事实来获取像ipaddress和hostname这样的东西。 取决于你的机器在哪里,接口的名字是不同的。 例如,Soft Layer提供的机器中的标识符是bond0,bond1等,Digital Ocean提供的是eth0,eth1等。其中,bond0和eth0是公共接口,bond1和eth1是私有的。
理想情况下,我们应该使用相同的Puppet脚本来configuration基础设施,无论您在哪里configuration。 我们使用hiera来获取类的默认值。 所以理想情况下,我想有像ipaddress_public,ipaddress_private可用的事实,然后我可以使用它们,但我想要在Puppet中的任何类。 事实上,这个事实应该隐藏出机器的软件层,软件层,数字海洋,AWS等等的血淋淋的细节,并为我提供这个工作的事实。 或者,我可以为hiera中的基础架构提供者创build一个层次结构,并为不同的基础架构提供者提供不同的默
问题是我不知道如何找出特定机器的提供者。 例如,如果我给你一台运行Puppet的机器,可以有一个可靠的方法来确定它是否在Soft Layer,Digital Ocean,AWS等上运行。 你们如何解决这些问题?
显然不是那么容易,因为它似乎在第一位。 在AWS的情况下,有自定义的事实,告诉你你是在aws,例如:
# facter -p | grep ^ec2 |wc -l 33
公共IP被保存在“ec2_public_ipv4”中。 所以,很容易检测到AWS。
但在DigitalOcean上 – 虚拟机内部没有任何内容表明它正在DigitalOcean上运行。 我看到的唯一有趣的事实是:
# facter -p | grep kvm virtual => kvm
亚马逊使用xenhvm。 如果SoftLayer使用xen / kvm以外的其他东西,那么你可以使用这个事实作为一个起点。 OffCourse这个方法不是很稳健,因为它们中的每一个都可以在某个时间点改变虚拟技术,这可能会导致提供者上的所有虚拟机无法运行。
我build议你写自己的自定义事实,这将考虑到你所使用的不同云提供商的所有知识,然后决定将哪些IP公开给你的脚本。 没有其他的方式不幸。