最近在兩臺物理機環境中部署了OpenStack的Liberty版本,各個模塊都遇到或多或少的問題,但尤以Neutron的問題最讓人頭疼。盡管OpenStack一直致力于簡化Neutron的部署,但對于非網絡技術人員來說依然存在著很大的挑戰,根本原因還是由于網絡自身的復雜性所導致的,因此想要成功部署Neutron還是需要網絡基礎的,但這并不意味著沒有網絡基礎就不能成功部署Neutron并使其工作。本文將總結Neutron的安裝部署步驟,并對遇到的問題進行詳細的描述,旨在提供解決問題的思路或者給與一定的啟示。
根據官方部署文檔的說法,Neutron允許創建由其它OpenStack服務管理的接口設備,并將這樣的設備附加到網絡,可以實現各種插件或代理以適應不同的網絡設備和軟件,為OpenStack架構提供足夠的靈活性。Neutron主要包括以下組件:
Neutron-server:接收并轉發API請求到合適的Neutron插件,如linuxbridge-agent。 Neutron插件和代理:連接port,創建網絡或子網,提供IP地址。根據云計算環境使用的廠商或者技術,這些插件和代理會有所區別。Neutron為思科的虛擬和物理交換機、NEC的OpenFlow產品、Open vSwitch(OVS)、Linux bridging和VMware的NSX產品提供了插件或代理。 消息隊列:Neutron使用消息隊列在Neutron-server和各種代理之間路由消息,也存儲特定插件的狀態。主要的消息隊列有RabbitMQ、Qpid和ZeroMQ。Neutron將網絡、子網和路由器抽象為對象,每個抽象對象都具有與其對應的物理概念或設備的功能,網絡包含子網,路由器在不同的子網和網絡之間路由消息。每個路由器有一個連接到網絡的網關(Gateway)和許多連接子網的虛擬網卡,連接到相同路由器的子網可以互相訪問。這和實際物理環境中路由器的功能是一致的。
無論以何種方式部署Neutron,在創建網絡時至少需要創建一個external網絡。與其它網絡不同的是,external網絡不僅僅是虛擬定義網絡,它代表了物理的,OpenStack安裝之外的外部網絡的視圖。External網絡上的IP地址可以被外部物理網絡訪問,由于external網絡僅僅表示外部網絡的視圖,因此在該網絡總DHCP是禁用的。除了external網絡,還要有一個或多個internal網絡,VMs直接連接到這些軟件定義網絡。相同internal網絡上的VMs可以互相訪問,或連接到相同路由器上不同子網中的VMs也可以互相訪問,比如主機A位于子網N1,主機B位于子網N2,N1和N2連接到相同的路由器,那么A和B之間是網絡可達的。外部網絡訪問VMs或VMs訪問外部網絡的功能有路由器完成,路由器的網關連接external網絡,internal網絡連接路由器的接口,與實際的物理網絡結構相似。可以為internal網絡中的ports分配external網絡中的IP地址,port指的是連接到子網的連接。通過將external網絡中的IP與VMs的ports關聯可以實現外部網絡對VMs的訪問。Neutron也支持安全組。安全組使管理員可以在組內定義防火墻規則,VM可以屬于多個安全組,Neutron根據安全組的規則或策略阻塞或允許ports,或VMs允許的通信類型。
本次將Neutron部署在兩臺物理機controller和compute上,其中controller做為控制節點(網絡節點),compute為計算節點,controller節點已經安裝配置了MySQL、RabbitMQ和keystone。首先需要在mysql數據庫中創建neutron對應的數據庫:
MariaDB [(none)]> create database neutron; Query OK, 1 row affected (0.04 sec) MariaDB [(none)]> grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'neutron'; Query OK, 0 rows affected (0.24 sec) MariaDB [(none)]> grant all privileges on neutron.* to 'neutron'@'%' identified by 'neutron'; Query OK, 0 rows affected (0.00 sec)
其次在keystone中創建neutron對應的用戶、service和endpoint:
新聞熱點
疑難解答