這是 OpenStack 實施經驗分享系列的第 7 篇。服務器
傳統運維中爲服務器配置靜態 IP 是再常見不過的了。但在 OpenStack 環境下只能指定 network,IP 都是 Neutron 從 subnet IP 池中自動分配的。網絡
有同窗就會想辦法了:等 instance 起來後手工把 IP 改掉行不行?運維
很是遺憾,不行!spa
instance 網卡的 IP 和 Mac 地址是記錄在 port 中的,計算節點的 iptable 會根據 port 信息生成相應的 rule,只有與 port 匹配的 IP 和 Mac 才能容許在 Neutron 網絡中通訊。操作系統
那還有沒有辦法爲 instance 配置靜態 IP 呢?命令行
有!code
方法是:ip
先建立 port,設置好 IP 地址。table
將該 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 在 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 的方法,下一節咱們繼續分享實施經驗。