Neutron 的設計目標是實現“網絡即服務(Networking as a Service)。為了達到這一目標,在設計上遵循了基於 SDN 實現網絡虛擬化的原則,在實現上充分利用了 Linux 系統上的各種網絡相關的技術
OpenStack 網絡服務,現已由之前的 Quantum 改名為 Neutron。Neutron 是 OpenStack 核心項目之一,提供雲計算環境下的虛擬網絡功能。
-
Multi-Vendor-Support:同時支持多種物理網絡類型,支持 Linux Bridge、 Hyper-V 和 OVS bridge 計算節點共存;
-
Neutron-Fwaas:支持防火牆服務;
-
VPNaas:支持節點間 VPN 服務;
-
More-Vendors:更多的網絡設備支持和開源 SDN 實現完善和提高,新增 加了 ML2 (The Modular Layer2) 插件
Neutron 網絡創建過程
Neutron 網絡目的是為 OpenStack 雲更靈活地划分物理網絡,在多租戶環境下 提供給每個租戶獨立的網絡環境。另外,Neutron 提供 API 來實現這種目標。 Neutron 中用戶可以創建自己的網絡對象,如果要和物理環境下的概念映射的話, 這個網絡對象相當於一個巨大的交換機,可以擁有無限多個動態可創建和銷毀的 虛擬端口
-
首先管理員拿到一組可以在互聯網上尋址的 IP 地址,並且創建一個外部 網絡和子網
-
租戶創建一個網絡和子網
-
租戶創建一個路由器並且連接租戶子網和外部網絡
-
租戶創建虛擬機
OpenStack 網絡類型
一個標准的 OpenStack 網絡設置有 4 個不同的物理數據中心網絡:
-
管理網絡:用於 OpenStack 各組件之間的內部通信
-
數據網絡:用於雲部署中虛擬數據之間的通信
-
外部網絡:公共網絡,外部或 internet 可以訪問的網絡
-
API 網絡:暴露所有的 OpenStack APIs,包括 OpenStack 網絡 API 給租戶們
Neutron 服務網絡管理的三種模式
Flat 模式
-
Flat 模式和 FlatDHCP 模式其實區別不大,都是基於網橋網絡,只是 FLat 模式 需要管理員手動配置(包括配置網橋和外部的 DHCP 設備)
FlatDHCP 模式
-
這種部署方式的缺點----單節點故障、無二層隔離(即所有的虛擬機都在一個廣播域)
VLAN 模式
-
VLAN(Virtual Local Area Network)的中文名為"虛擬局域網"。VLAN 是一種將局 域網設備從邏輯上划分成一個個網段,從而實現虛擬工作組的新興數據交換技術
Neutron基本功能
-
提供穩定的負載均衡 API
-
支持端到端的 IPSec VPN
-
面向租戶的防火牆服務
-
提供一個新的插件 ML2,
Neutron重要幾部分組成
-
Neutron Server : 這 一 部 分 包 含 守 護 進 程 neutron-server 和各種插件 neutron-*-plugin, 它們 既可 以安 裝在 控制 節點 也可 以安 裝在 網絡 節點。 neutron-server 提供 API 接口,並把對 API 的調用請求傳給已經配置好的插件進行 后續處理。插件需要訪問數據庫來維護各種配置數據和對應關系,例如路由器、 網絡、子網、端口、浮動 IP、安全組等等
-
插件代理 (Plugin Agent): 虛擬網絡上的數據包的處理則是由這些插件代理來 完成的。名字為 neutron-*-agent。在每個計算節點和網絡節點上運行。一般來說 你選擇了什么插件,就需要選擇相應的代理。代理與 Neutron Server 及其插件的 交互就通過消息隊列來支持
-
DHCP 代理(DHCP Agent): 名字為 neutron-dhcp-agent,為各個租戶網絡提供 DHCP 服務,部署在網絡節點上,各個插件也是使用這一個代理
-
3 層代理 (L3 Agent): 名字為 neutron-l3-agent, 為客戶機訪問外部網絡提供 3 層轉發服務。也部署在網絡節點上
但但最重要的是API和插件
API 又分為兩個部分
-
API Core:暫且稱之為 API 核。它可以看做是插件功能的最小集合,即每個插件 都必須有的功能,也就是對網絡、子網和端口的查詢、加刪和更新操作等
-
API Extensions:暫稱之為 API 擴展。它們一般是針對具體插件實現的,這樣租戶 就可以利用這些插件獨特的功能,比方說訪問控制(ACL)和 QoS
插件
-
存儲當前邏輯網絡的配置信息,這就需要一個數據庫,比方說 MySQL
-
判斷和存儲邏輯網絡和物理網絡的對應關系,比方說為一個邏輯網絡選擇一個 vlan
-
與一種或多種交換機通信來實現這種對應關系。這一般通過宿主機上的插件代 理來實現這種操作,或者遠程登錄到交換機上來配置
Neutron 的配置應該說是比 Openstack 的其他組件復雜一點。 常用的配置模型有兩種,把 Neutron Server 放在控制節點上,DHCP 和 L3 代理放 在網絡節點上
網絡管理
查看網絡列表和網絡詳細信息
[root@controller ~]# neutron net-list [root@controller ~]# neutron net-show [root@controller ~]# openstack network list [root@controller ~]# openstack network show
創建外部網絡
[root@controller ~]# openstack network create –share –external –provider-physical-network provider –provider-network-type flat Network --provider-physical-network 指定的是物理網段 flat 指定類型 [root@controller ~]# neutron net-create --provider:network_type=flat --provider:physical_network=provider Network
[root@controller ~]# openstack network create insernet
[root@controller ~]# neutron net-create insernet
[root@controller ~]# openstack network delete insernet
[root@controller ~]# neutron net-delete insernet
子網管理
創建子網
[root@controller ~]# openstack subnet create subnet1 --network Network --subnet-range 192.168.100.0/24 --gateway=192.168.100.1 --dns 114.114.114.114 [root@controller ~]#neutron subnet-create --gateway 192.168.100.1 --dns 114.114.114.114 --name subnet1 Network 192.168.100.0/24
更新子網
[root@controller ~]# neutron subnet-update [參數] subnet1
刪除子網
[root@controller ~]# openstack subnet delete subnet1
[root@controller ~]# neutron subnet-delete subnet1
路由管理
查看路由列表和詳細信息
[root@controller ~]# openstack router list
[root@controller ~]# neutron router-list
創建路由器
[root@controller ~]# openstack router create router1
[root@controller ~]# neutron router-create router1
添加接口
[root@controller ~]#openstack router add subnet router subnet1 #連接內網子網接口 [root@controller ~]#openstack router set router –-external-gateway Network #連接外網接口(不是子網) [root@controller ~]#openstack port list -–router router #查看port端口 ping網關 [root@controller ~]# neutron router-gateway-set router1 Network [root@controller ~]# neutron router-interface-add router1 subnet1
刪除網關
[root@controller ~]# neutron router-gateway-clear router1 Network
端口管理
查看端口的列表和詳細信息
[root@controller ~]# neutron port-list
[root@controller ~]# neutron port-show <port_id>
創建端口
[root@controller ~]# neutron port-create [--fixed-ip ip_address=IP ] <network>
刪除端口
[root@controller ~]#neutron port-delete <port>
浮動IP
創建浮動IP
[root@controller ~]# openstack floating ip create 外網網卡id
查詢port
[root@controller ~]# openstack port list
[root@controller ~]# openstack floating ip set –-port 主機ip的端口id –-fixed-ip-address 內網ip 外網ip