不過我們實驗了一段時間,一直沒辦法把 Neutron 設定好
後來改嘗試完全不使用 Neutron,而是使用原本 Nova 自帶的 Nova Network 套件。
其中因為我們暫時的目標是要能夠透過 ssh 直接連上 OpenStack 上的虛擬機器,因此設定選用 FlatManager 這個最基本的網路設定。
補充:FlatManager 在某些方面不太被認同,可以參考 [8] 的討論。
FlatManager 的概念可以參考 [1],以下節錄一張簡易的架構圖。
從圖中可以稍微看出,在 FlatManager 的模式中,Nova 不做任何網路的管理,而是把網路設定轉嫁給外部的 DHCP 伺服器
因此在這個設定裡,所有 Nova 上的虛擬機器都會直接向外部的 DHCP 伺服器取得 IP,也可以直接由外部連線至 Nova 上的虛擬機器。
以下介紹的部分,操作環境是 ubuntu server 12.04.4;使用的 Nova 版本是 2014.1.1,而使用的版本檢測方法來自 [2],檢測過程如下:
root@ubuntu:~# nova-manage shell python Python 2.7.3 (default, Feb 27 2014, 19:58:35) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from nova import version >>> version.version_string() '2014.1.1' >>>操作的主機有兩張網卡 eth0 和 eth1,其中 eth1 沒有設定 IP(預留給 Nova Network 橋接用的)。
以下是 FlatManager 的設定步驟。其他相關資料可以參考 [3-5],而關於網路問題,也可以看看 [6],可能會有幫助。
1. 設定 Nova Network 的網路環境
因為 FlatManager 不管理網路,所以會需要事先在 Nova Network 的伺服器上設定要提供給 Nova Compute 運行的網路環境。
補充:本文中雖然會特別提到 Nova Compute 和 Nova Network,但我是直接把這兩個都裝在同一台伺服器上。
具體來說,就是要建立一個 bridge interface 供 Nova 產生的虛擬機器橋接。
首先要先安裝 birdge-utils 這個工具。
apt-get install bidge-utils
安裝完以後,要建立一個永久的 bridge interface,因此要編輯 /etc/network/interfaces 檔案,設定如下的內容:
auto eth1 auto br100 iface br100 inet manual bridge_ports eth1 bridge_stp off bridge_maxwait 0 bridge_fd 0eth1 是實體網卡,而 br100 是要讓 bridge-utils 在開機時自動建立的 bridge interface。
設定完成後,把網路重新啟動。
/etc/init.d/networking restart
2. 設定 Nova Network
假設 Nova Compute 已經安裝完成了,要在有安裝 Nova Network 套件的伺服器上編輯 /etc/nova/nova.conf:
# NETWORK network_manager=nova.network.manager.FlatManager # For injected network informations in instance flat_injected=true #firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver # Temporary removing firewall for debugging firewall_driver=nova.virt.firewall.NoopFirewallDriver # Have nova-network on each compute-node multi_host=true flat_network_bridge=br100 flat_network_dns = 8.8.4.4 force_dhcp_release = True gateway = aaa.bbb.26.1有關各個設定的用途,可以參考 [7]。比較特別的是為了測試,這裡有加上 firewall_driver=nova.virt.firewall.NoopFirewallDriver 的設定
這段設定是把 Nova Network 的防火牆關閉,不過根據官方文件的描述是建議網路設定測試完以後,要把這段設定去除以確保安全。
另外 aaa.bbb.26.1 表示的是我的網路環境中的 gateway 位址。
設定完以後記得重新啟動 Nova 的服務。
service nova-compute restart
3. 新增虛擬網路
在沒有安裝 Neutron 的狀況下,OpenStack Dashboard 上其實看不到任何網路相關的東西,但這並不表示就沒有虛擬網路需要設定。
可以透過 Nova Client 做基本的測試:
root@ubuntu:~# nova network-list +--------------------------------------+------------+----------------+ | ID | Label | Cidr | +--------------------------------------+------------+----------------+ +--------------------------------------+------------+----------------+這樣的結果表示目前沒有建立任何的虛擬網路。此時如果想要建立虛擬機器,虛擬機器開機後會因為無法取得網路介面而一直卡在 Spawning 的階段
而且有時候因為這個原因卡住時,因為實際上虛擬機器並沒有被建立,所以想要把這個虛擬機器關掉時也可能會關不掉(卡在 Deleting 的階段)....。
想要建立網路,可以使用以下的指令:
nova-manage network create --multi_host=T --fixed_range_v4=aaa.bbb.26.0/24 --bridge=br100 --bridge_interface=br100 --num_networks=1 --network_size=10 --label=network100其中 --fixed_range_v4 是表示這個虛擬網路的 IP 範圍。不過特別的地方是,根據結果來看,這裡指定的 IP 好像跟實際虛擬機器拿到的 IP 沒有關連。
建立完以後,再用同樣的指令看看結果:
root@ubuntu:~# nova network-list +--------------------------------------+------------+----------------+ | ID | Label | Cidr | +--------------------------------------+------------+----------------+ | 2445546a-4d8c-4796-bd57-1837f57b82f5 | network100 | aaa.bb.26.0/28 | +--------------------------------------+------------+----------------+這裡可以注意到,上頭建立時使用的參數是 aaa.bbb.26.0/24,但建出來的虛擬網路的 CIDR 卻是 aaa.bb.26.0/28....原因我還不太清楚 Orz。
4. 開啟虛擬機器
到這裡其實設定就完成了,在 [3-5] 是使用指令開啟虛擬機器,不過我是都直接從 OpenStack Dashboard 打開 XD
打開虛擬機器後,透過 Nova Client 的 API 可以看到新的虛擬機器的狀態如下:
root@ubuntu:~# nova list +--------------------------------------+------+--------+------------+-------------+------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------+--------+------------+-------------+------------------------+ | 22bf232d-f3ea-4751-9699-5512b0fb82ac | qwer | ACTIVE | - | Running | network100=aaa.bb.26.2 | +--------------------------------------+------+--------+------------+-------------+------------------------+不過這裡顯示的 aaa.bb.26.2 並不是真正虛擬機器拿到的 IP....
從虛擬機器的 log 可以看到類似以下的訊息:
Cloud-init v. 0.7.5 running 'init-local' at Wed, 06 Aug 2014 10:40:11 +0000. Up 4.46 seconds. * Starting enable remaining boot-time encrypted block devices[74G[ OK ] cloud-init-nonet[4.89]: waiting 10 seconds for network device * Starting Mount network filesystems[74G[ OK ] * Stopping Mount network filesystems[74G[ OK ] cloud-init-nonet[6.47]: static networking is now up * Starting configure network device[74G[ OK ] Cloud-init v. 0.7.5 running 'init' at Wed, 06 Aug 2014 10:40:13 +0000. Up 6.73 seconds. ci-info: +++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++ ci-info: +--------+------+---------------+---------------+-------------------+ ci-info: | Device | Up | Address | Mask | Hw-Address | ci-info: +--------+------+---------------+---------------+-------------------+ ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | . | ci-info: | eth0 | True | aaa.bb.26.121 | 255.255.255.0 | fa:16:3e:f3:b9:31 | ci-info: +--------+------+---------------+---------------+-------------------+ ci-info: +++++++++++++++++++++++++++++++Route info++++++++++++++++++++++++++++++++ ci-info: +-------+-------------+-------------+---------------+-----------+-------+ ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags | ci-info: +-------+-------------+-------------+---------------+-----------+-------+ ci-info: | 0 | 0.0.0.0 | aaa.bb.26.1 | 0.0.0.0 | eth0 | UG | ci-info: | 1 | aaa.bb.26.0 | 0.0.0.0 | 255.255.255.0 | eth0 | U | ci-info: +-------+-------------+-------------+---------------+-----------+-------+這上面顯示的 "aaa.bb.26.121" 就是虛擬機器透過外部 DHCP 伺服器取得的 IP。
驗證方式則是直接進入虛擬機器內,使用 ifconfig 顯示的以下資訊:
$ ifconfig eth0 Link encap:Ethernet HWaddr FA:16:3E:8C:0C:9F inet addr:aaa.bb.26.121 Bcast:aaa.bb.26.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fe8c:c9f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:155188 errors:0 dropped:0 overruns:0 frame:0 TX packets:1055 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:21368597 (20.3 MiB) TX bytes:97535 (95.2 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
參考資料:
1、OpenStack Networking – FlatManager and FlatDHCPManager
2、Checking The Installed Version of OpenStack
3、Use flat network with OpenStack
4、Network configuration after the installation of the OpenStack Nova FlatManager (簡中翻譯版)
5、OPENSTACK MANUALS > OPENSTACK COMPUTE ADMINISTRATION GUIDE - GRIZZLY, 2013.1 > Libvirt Flat Networking
6、OPENSTACK MANUALS > OPENSTACK CLOUD ADMINISTRATOR GUIDE - CURRENT > Troubleshoot Networking
7、OPENSTACK MANUALS > OPENSTACK CONFIGURATION REFERENCE - JUNO > nova.conf - configuration options
8、Why do people believe the FlatManager is a bad option for networking?
沒有留言:
張貼留言