首先交代下背景:由於想比較openstack下各種熱遷移方法的效能,我開放了將要遷移的例項的8000埠,然後執行一個腳步程式,從遠端不斷請求訪問這個例項,與此同時進行熱遷移,記錄遷移時間及效率。然而,在開放埠後,遠端並不能訪問該例項。

此時,將宿主節點的防火牆重新關閉:

systemctl start iptables.service
systemctl stop iptables.service

遠端可以訪問例項了,虛擬機器也不斷給予相應:

為了避免遷移到目的節點也出現該問題,我也重新關閉了遷移目的節點的iptables服務。然後在dashboard上操作進行熱遷移。在遷移進行時,例項不能響應請求了。直到遷移完成,例項也沒有能夠響應遠端的請求。此時,檢視目的節點的iptables狀態發現其依舊是關閉的狀態,嘗試將目的節點的防火牆重新關閉(利用上文提到的兩條命令),結果遠端可以繼續訪問例項了。

檢視iptables-save:

發現物理節點對於例項開放的埠並不包括8000。判斷很可能是安全組設定的問題。

在dashboard中新建立一個安全組,新增規則,開放8000埠:

新建立一個虛擬機器例項,勾選剛剛建立的這個安全組。建立完成後檢視iptables-save,發現對於剛剛建立的虛擬機器8000埠開放了:

用telnet命令測試是否可以訪問8000埠,結果是可以的:

可以得到一條經驗: 在openstack下,如果要讓例項對外提供服務,必須在建立例項時新增對應服務埠的安全組。