這是 OpenStack 實施經驗分享系列的第 7 篇。
傳統運維中為服務器配置靜態 IP 是再常見不過的了。但在 OpenStack 環境下只能指定 network,IP 都是 Neutron 從 subnet IP 池中自動分配的。
有同學就會想辦法了:等 instance 起來后手工把 IP 改掉行不行?
非常遺憾,不行!
instance 網卡的 IP 和 Mac 地址是記錄在 port 中的,計算節點的 iptable 會根據 port 信息生成相應的 rule,只有與 port 匹配的 IP 和 Mac 才能允許在 Neutron 網絡中通信。
那還有沒有辦法為 instance 配置靜態 IP 呢?
有!
方法是:
-
先創建 port,設置好 IP 地址。
-
將該 port attach 到 instance。
-
在 instance 中手工配置靜態 IP。
Newton 版本之前只能用命令行完成上面的操作。不過從 Newton 開始 horizon 已經支持了。我們先看命令行如何實現。
命令行操作
instance “c1” 當前還沒有任何網卡。
第一步:用 neutron port-create 命令創建 port,設置 IP。
最重要的就是 --fixed-ip
參數了,指定 IP 和 IP 所屬的 subnet。
另外還可以指定 Mac 地址(可選),這在某些場景下有用。之前有個項目客戶的商業軟件是綁定在特定 Mac 地址上的,所以必須給 instance 網卡指定 Mac。
Network
參數指定 port 所屬的網絡。
下面的命令創建了一個 vlan111 的 port,IP 為 17.17.111.33。
neutron port-create --fixed-ip subnet_id=e0e251a0-0e38-4b70-9904-6b791fcf8d33,ip_address=17.17.111.33 vlan111
第二步:執行 nova interface-attach
命令將 port attach 到 instance。
操作系統已經能夠識別到該網卡 eth0,但 IP 還需要手工設置。
第三步:在 instance 配置靜態 IP。
編輯 /etc/network/interfaces。
重啟 eth0。
IP 生效。
並且可以 Ping 到同網段其他 IP。
如果這里我們配置的 IP 不是 port 中定義的 17.17.111.33 還能 Ping 通嗎?這個問題留給大家自己去驗證。
horizon 操作
horizon 在 Newton 版本中支持在創建 port 時設置 IP 地址,也就是說步驟一我們可以直接在 Web GUI 中完成了。
菜單 “Admin -> System -> Networks”。
點擊網絡 “vlan111”,然后點擊 “Ports” 標簽。
點擊 “Create Port” 按鈕。
設置 IP 17.17.111.55,然后點擊 “Create Port” 按鈕。
port 創建成功,目前還沒有 attach 到 instance,所以狀態為 “Down”。
horizon 目前還不支持直接將 port attach 到 instance,這個操作還得通過命令行,具體請參考前面的示例。希望新版本的 horizon 能加入這個功能。
好了,以上就是設置靜態 IP 的方法,下一節我們繼續分享實施經驗。