天天看點

instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)

instance 的網卡是如何被配置并拉起的?這是了解和用好 cloud-init 非常關鍵的一步。我們先讨論一個最簡單基礎的場景:鏡像中沒有安裝 cloud-init。

此時 instance 啟動時網卡能不能被拉起來完全 靠運氣!是的,就是運氣。

因為這種情況下網卡的配置是死的,完全依賴于鏡像中 /etc/network/interfaces 原有的配置。比如原鏡像中的配置是:

auto eth0

iface eth0 inet dhcp

instance 隻有滿足下面所有條件網卡才能被拉起來:

正好隻有一塊網卡

正好網卡就叫 eth0

正好 subnet 開了 DHCP

隻要出現下面任意一種情況就會失敗:

還有其他網卡,比如 eth1,或者

網卡不叫 eth0 ,比如 ens3,或者

沒有 DHCP

不同 instance 的網絡配置差别很大,在 image 中寫死的方法幾乎是無效的,隻能依靠 cloud-init 動态寫入,接下來我們詳細分析 cloud-init 的解決方案。

先考慮 subnet 有 DHCP 服務的情況。

部署成功後,登入 instance,<code>ip a</code> 顯示網卡 <code>ens3</code> 已經正确配置。

instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)
instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)

下面分析這個 IP 是怎樣配置上去的。

上一節我們讨論到,cloud-init 是在 local 階段完成網絡配置的,cloud-init 的執行過程被詳細記錄在 /var/log/cloud-init.log 中,讓我們找找相關操作。

instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)

這裡可以看到,cloud-init 會做如下工作:

① 掃描出 instance 中的所有網卡(這裡是 ens3)

② 擷取該網卡的配置資訊。 因為沒有 config drive,無法得知網卡的詳細配置資訊,隻能采用預設的 fallback 配置,即 dhcp 配置。

③ 将配置資訊寫入 /etc/network/interfaces.d/50-cloud-init.cfg,内容為:

instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)

這樣網卡就以 dhcp 模式拉起來,正好與 subnet 的 dhcp 服務對接上,IP、網關等資訊就配上去了。

幾點說明:

instance 上的每一塊網卡都會被 cloud-init 掃描出來。

如果沒有 config drive 将采用 fallback 配置,将掃描出來的第一塊 (隻有這一塊)網卡配置成 dhcp 模式。請注意:這是 cloud-init 預設行為,跟這塊網卡對應的 subnet 是否開啟了 DHCP 沒有任何關系。

cloud-init 會根據 instance 作業系統類型生成網卡配置檔案。例如作業系統是 centos 的話則會将配置寫到 /etc/sysconfig/network-scripts 目錄下。

現在請大家思考一個問題:如果 subnet 沒有開 DHCP,會是怎樣一個情況?下節将分析這個問題。

instance 網卡是如何被拉起來的?- 每天5分鐘玩轉 OpenStack(172)

繼續閱讀