如何为无状态的Ubuntu虚拟机自动分配IP?

如何为无状态的Ubuntu虚拟机自动分配IP?

我计划创建一个可重复使用的模板映像,以便将我的应用程序部署到可能位于不同网络和不同数据中心的多个虚拟机。我计划完全控制主机系统并运行 KVM 作为虚拟机管理程序。

当连接到虚拟机时,图像将变得不可变,因此我可以通过更新单个模板而不是每台机器的内部软件来更轻松地部署更改。

我知道如何在常规 ubuntu 系统上配置 /etc/network/interfaces 文件,但是当您在第一次启动时使用虚拟机的不可变映像时,如何自动为每个虚拟机分配 1 个或多个 IP 地址?

到目前为止,我能想到的唯一方法是将模板设置为在启动时依靠 DHCP 进行联网。机器启动后,它可以运行一个脚本,通过连接到具有网络配置信息的另一台服务器或远程文件系统来验证和重新配置 IP 配置。

也许,在网络可用后,我可以在客户虚拟机上运行一个脚本,该脚本将所连接网络接口的 MAC 地址作为唯一 ID 发送,以从具有 IP 分配的另一个“主”服务器检索网络配置。这假设所有虚拟机在创建时都会被分配一个唯一的 MAC 地址。

我可能需要避免启动 mysql 和 php 之类的服务,直到网络配置完成并验证完毕,以便启动后不久重新启动的网络不会扰乱任何重要的事情。

这听起来是正确的做法吗?

Amazon EC2、openstack 或其他公司是否有不同的网络自动化方法?也许他们提供了在启动期间执行相同操作的 API 和/或脚本?

我在 Ubuntu 主机上使用 KVM,如果重要的话,客户操作系统也将是 Ubuntu。

答案1

您唯一可以从主机端控制的就是您提供给虚拟机的 MAC 地址。因此,最简单的方法是在 DHCP 中为特定虚拟机保留您希望其拥有的 IP 地址,并将其分配给特定的 MAC 地址,然后在设置虚拟机时将该 MAC 地址分配给该虚拟机。这种方法可以扩展到一定程度,但对于数百台虚拟机来说,管理 MAC 地址可能会变得非常繁琐。

因此,下一个方法是使用附加的 ISO 或软盘映像启动虚拟机,其中提供了额外的每个虚拟机设置文件。虚拟机将在启动时运行一个脚本,该脚本将查找附加的 ISO/软盘映像并应用在那里找到的设置(如果附加了这样的映像)。在配置新虚拟机或重新配置现有虚拟机时易于使用。

当然,最好的方法是使用配置管理系统 (puppet/chef/cfengine/ansible/saltstack/etc) 或某种融合部署/配置系统,如 theForeman。这是有史以来可扩展性最高的系统,并且让您能够灵活地管理不仅仅是网络的设置。

答案2

我认为您试图让事情变得比实际更困难。Ubuntu 中的默认 KVM 网络称为用户模式。

https://help.ubuntu.com/community/KVM/Networking#usermodenetworking

这将在您的物理主机上创建一个 NAT,允许您的所有虚拟机通过 NAT 访问网络。虚拟机会获得一个 DHCP 地址,正如您上面所说,就是这样。

或者,你可以使用桥接网络使得外部主机能够直接访问客户操作系统上的服务。

相关内容