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


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

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

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

auto eth0
iface eth0 inet dhcp


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

  1. 正好只有一塊網卡

  2. 正好網卡就叫 eth0

  3. 正好 subnet 開了 DHCP

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

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

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

  3. 沒有 DHCP

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

dhcp

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

我們使用的鏡像是 ubuntu 的 cloud image,已經預裝的 cloud-init,下載地址為 http://cloud-images.ubuntu.com/ ,國內鏡像http://mirrors.ustc.edu.cn/ubuntu-cloud-images/

部署成功后,登錄 instance,ip a 顯示網卡 ens3 已經正確配置。



41.png

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

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

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

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

② 獲取該網卡的配置信息。 因為沒有 config drive,無法得知網卡的詳細配置信息,只能采用默認的 fallback 配置,即 dhcp 配置。

③ 將配置信息寫入 /etc/network/interfaces.d/50-cloud-init.cfg,內容為:

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

幾點說明:

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

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

  3. cloud-init 會根據 instance 操作系統類型生成網卡配置文件。例如操作系統是 centos 的話則會將配置寫到 /etc/sysconfig/network-scripts 目錄下。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM