如何為無狀態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 中為特定 MAC 保留您希望特定虛擬機器擁有的 IP,然後在設定時將該 MAC 位址提供給相關虛擬機器。這可以擴展到一定程度,但管理 MAC 的數百個虛擬機器可能會變得乏味。

因此,下一個方法是使用附加的 ISO 或軟碟映像啟動 VM,其中提供了每個 VM 的附加設定檔。 VM 將在啟動時執行一個腳本,該腳本將尋找附加的 ISO/軟碟映像,並套用其中找到的設定(如果附加了此類映像)。配置新虛擬機器或重新配置現有虛擬機器時易於使用。

當然,最好的方法是使用組態管理系統(puppet/chef/cfengine/ansible/saltstack/等)或某種融合部署/組態系統,例如 theForeman。它具有前所未有的可擴展性,並且允許您靈活地管理不僅僅是網路的設定。

答案2

我認為你試圖讓這件事變得比實際需要的更加困難。 Ubuntu 中預設的 KVM 網路稱為使用者模式。

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

這將在您的實體主機上建立 NAT,允許所有虛擬機器透過 NAT 存取網路。正如您上面所說,虛擬機器獲得一個 DHCP 位址,僅此而已。

或者,您可以使用橋接網路使外部主機能夠直接存取來賓作業系統上的服務。

相關內容