
Neutron概述;Neutron功能;Neutron網絡基本概念(network、subnet、port) ============================================================================================= Neutron 的設計目標是實現“網絡即服務(Networking as a Service)”。為了達到這一目標,在設計上遵循了基於 SDN 實現網絡虛擬化的原則,在實現上充分利用了 Linux 系統上的各種網絡相關的技術。 -------------------------------------------------------------------------------------------- Neutron 為整個 OpenStack 環境提供網絡支持,包括二層交換,三層路由,負載均衡,防火牆和 VPN 等。 二層交換 Switching: Nova 的 Instance 是通過虛擬交換機連接到虛擬二層網絡的。Neutron 支持多種虛擬交換機,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 利用 Linux Bridge 和 OVS,Neutron 除了可以創建傳統的 VLAN 網絡,還可以創建基於隧道技術的 Overlay 網絡,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。 三層路由 Routing: Instance 可以配置不同網段的 IP,Neutron 的 router(虛擬路由器)實現 instance 跨網段通信。router 通過 IP forwarding,iptables 等技術來實現路由和 NAT。 負載均衡 Load Balancing: Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了將負載分發到多個 instance 的能力。 LBaaS 支持多種負載均衡產品和方案,不同的實現以 Plugin 的形式集成到 Neutron,目前默認的 Plugin 是 HAProxy。 防火牆 Firewalling: Neutron 通過下面兩種方式來保障 instance 和網絡的安全性: Security Group:通過 iptables 限制進出 instance 的網絡包。 Firewall-as-a-Service:FWaaS,限制進出虛擬路由器的網絡包,也是通過 iptables 實現。 ============================================================================================= Neutron 管理的網絡資源包括 Network,subnet 和 port Neutron 的 router 是通過 Linux network namespace 實現的。 ###openstack的vroute是由network namespace實現的? --------------------------------------------------------------------------------------------- network 是一個隔離的二層廣播域。Neutron 支持多種類型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。 local(單host內部的網絡?) local 網絡與其他網絡和節點隔離。local 網絡中的 instance 只能與位於同一節點上同一網絡的 instance 通信,local 網絡主要用於單機測試。 flat(跨host,但處於物理網絡的網絡?) flat 網絡是無 vlan tagging 的網絡。flat 網絡中的 instance 能與位於同一網絡的 instance 通信,並且可以跨多個節點。 vlan(跨host,使用vlan進行隔離的網絡?) vlan 網絡是具有 802.1q tagging 的網絡。vlan 是一個二層的廣播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通過 router 通信。vlan 網絡可跨節點,是應用最廣泛的網絡類型。 vxlan(跨host,使用vxlan進行隔離的網絡?) vxlan 是基於隧道技術的 overlay 網絡。vxlan 網絡通過唯一的 segmentation ID(也叫 VNI)與其他 vxlan 網絡區分。vxlan 中數據包會通過 VNI 封裝成 UDP 包進行傳輸。因為二層的包通過封裝在三層傳輸,能夠克服 vlan 和物理網絡基礎設施的限制。 gre gre 是與 vxlan 類似的一種 overlay 網絡。主要區別在於使用 IP 包而非 UDP 進行封裝。 network必須屬於某個project;Project 與 network 之間是 1對多關系。 --------------------------------------------------------------------------------------------- subnet 是一個 IPv4 或者 IPv6 地址段。instance 的 IP 從 subnet 中分配。每個 subnet 需要定義 IP 地址的范圍和掩碼。 network 與 subnet 是 1對多 關系。一個 subnet 只能屬於某個 network;一個 network 可以有多個 subnet,這些 subnet 可以是不同的 IP 段,但不能重疊。 --------------------------------------------------------------------------------------------- port 可以看做虛擬交換機上的一個端口。port 上定義了 MAC 地址和 IP 地址,當 instance 的虛擬網卡 VIF(Virtual Interface) 綁定到 port 時,port 會將 MAC 和 IP 分配給 VIF。 subnet 與 port 是 1對多 關系。一個 port 必須屬於某個 subnet;一個 subnet 可以有多個 port。 --------------------------------------------------------------------------------------------- Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance
Neutron 架構

Neutron 架構:Neutron組件簡介 ======================================================================================================= 圖1架構圖展示了與其他服務相似的設計思路 圖2架構圖似乎描述的更准確一些,因為教程在詳細介紹Neutron 組件時,plugin在Neutorn Server中介紹的,plugin是Neutorn Server的一部分 ---------------------------------------------------------------- 圖1架構圖 Neutron Server 對外提供 OpenStack 網絡 API,接收請求,並調用 Plugin 處理請求。 Plugin 處理 Neutron Server 發來的請求,維護 OpenStack 邏輯網絡狀態, 並調用 Agent 處理請求。 Agent 處理 Plugin 的請求,負責在 network provider 上真正實現各種網絡功能。 network provider 提供網絡服務的虛擬或物理網絡設備,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交換機。 Queue Neutron Server,Plugin 和 Agent 之間通過 Messaging Queue 通信和調用。 Database 存放 OpenStack 的網絡狀態信息,包括 Network, Subnet, Port, Router 等。 ---------------------------------------------------------------- 圖2架構圖 Neutron 采用的是分布式架構,包括 Neutorn Server、各種 plugin/agent、database 和 message queue。 1.Neutron server 接收 api 請求。 2.plugin/agent 實現請求。 3.database 保存 neutron 網絡狀態。 4.message queue 實現組件之間通信。
Neutron架構圖展開效果

Neutron 架構展開 1.Neutron 通過 plugin 和 agent 提供的網絡服務。 2.plugin 位於 Neutron server,包括 core plugin 和 service plugin。 3.agent 位於各個節點,負責實現網絡服務。 4.core plugin 提供 L2 功能,ML2 是推薦的 plugin。 5.使用最廣泛的 L2 agent 是 linux bridage 和 open vswitch。 6.service plugin 和 agent 提供擴展功能,包括 dhcp, routing, load balance, firewall, vpn 等。

Neutron 架構復雜的好處;Neutron 流程示例:創建一個 VLAN100 的 network ------------------------------------------------------ Neutron 架構非常靈活,層次較多,目的是: 1.為了支持各種現有或者將來會出現的優秀網絡技術。 2.支持分布式部署,獲得足夠的擴展性。 ------------------------------------------------------ 以創建一個 VLAN100 的 network 為例,假設 network provider 是 linux bridge, 流程如下: 1.Neutron Server 接收到創建 network 的請求,通過 Message Queue(RabbitMQ)通知已注冊的 Linux Bridge Plugin。 2.Plugin 將要創建的 network 的信息(例如名稱、VLAN ID等)保存到數據庫中,並通過 Message Queue 通知運行在各節點上的 Agent。 3.Agent 收到消息后會在節點上的物理網卡(比如 eth2)上創建 VLAN 設備(比如 eth2.100),並創建 bridge (比如 brqXXX) 橋接 VLAN 設備。
Neutron Server

Neutron Server = API + Plugins (圖1) ;Neutron Server 分層模型(圖2) =================================================================================================== Neutron Server = API + Plugins (圖1) Neutron Server 包括兩部分: 1. 提供 API 服務。 2. 運行 Plugin。 ------------------------------------------------------------------------- Neutron Server 分層模型(圖2) Core API 對外提供管理 network, subnet 和 port 的 RESTful API。 Extension API 對外提供管理 router, load balance, firewall 等資源 的 RESTful API。 Commnon Service 認證和校驗 API 請求。 Neutron Core Neutron server 的核心處理程序,通過調用相應的 Plugin 處理請求。 Core Plugin API 定義了 Core Plgin 的抽象功能集合,Neutron Core 通過該 API 調用相應的 Core Plgin。 Extension Plugin API 定義了 Service Plgin 的抽象功能集合,Neutron Core 通過該 API 調用相應的 Service Plgin。 Core Plugin 實現了 Core Plugin API,在數據庫中維護 network, subnet 和 port 的狀態,並負責調用相應的 agent 在 network provider 上執行相關操作,比如創建 network。 Service Plugin 實現了 Extension Plugin API,在數據庫中維護 router, load balance, security group 等資源的狀態,並負責調用相應的 agent 在 network provider 上執行相關操作,比如創建 router。
plugin、agent、network provider

plugin與agent的功能分工;plugin、agent 和 network provider協作的3個痛點(引出ML2);plugin分類(core plugin 和 service plugin) ================================================================================================ plugin與agent的功能分工 plugin 解決的是網絡要配置成什么樣子; agent 則負責配置落地。 一個簡單的場景:在 Neutorn 中使用 linux bridge 這一種 network provider。 我們需要實現兩個東西:linux bridge core plugin 和 linux bridge agent。 linux bridge core plugin 1.與 neutron server 一起運行。 2.實現了 core plugin API。 3.負責維護數據庫信息。 4.通知 linux bridge agent 實現具體的網絡功能。 linux bridge agent 1.在計算節點和網絡節點(或控制節點)上運行。 2.接收來自 plugin 的請求。 3.通過配置本節點上的 linux bridge 實現 neutron 網絡功能。 同樣的道理,如果要支持 open vswitch,只需要實現 open vswitch plugin 和 open vswitch agent。 ----------------------------------------------------------------------------------------------- plugin、agent 和 network provider協作的3個痛點: 痛點1:plugin、agent 和 network provider 是配套使用的:(痛點1:由ML2解決) 比如 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent; 如果 network provider 換成了 OVS 或者物理交換機,plugin 和 agent 也得替換。 痛點2:所有 network provider 的 plugin 都要編寫一套非常類似的數據庫訪問代碼(plugin 在數據庫中維護 Neutron 網絡的狀態信息) 解決:Neutron 在 Havana 版本實現了一個 ML2(Modular Layer 2)plugin,對 plugin 的功能進行抽象和封裝。 各種 network provider 無需開發自己的 plugin,只需要針對 ML2 開發相應的 driver 就可以了 痛點3:只能在 OpenStack 中使用一種 core plugin,多種 network provider 無法共存。(由ML2解決) Core plugin 負責管理和維護 Neutron 的 network, subnet 和 port 的狀態信息,這些信息是全局的,只需要也只能由一個 core plugin 管理。 只使用一個 core plugin 本身沒有問題。但問題在於傳統的 core plugin 與 core plugin agent 是一一對應的。 ----------------------------------------------------------------------------------------------- plugin 按照功能分為兩類: core plugin 和 service plugin。 core plugin 維護 Neutron 的 netowrk, subnet 和 port 相關資源的信息,與 core plugin 對應的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服務,也有相應的 agent。
Core Plugin/Agent 負責管理核心實體:net, subnet 和 port。
Service Plugin/Agent 負責更高級的網絡服務,包括路由,load balance,firewall等

ML2 Core Plugin;ML2 type driver、ML2 mechansim driver; ======================================================================================================== Moduler Layer 2(ML2)是 Neutron 在 Havana 版本實現的一個新的 core plugin,用於替代原有的 linux bridge plugin 和 open vswitch plugin。 ML2 作為新一代的 core plugin,提供了一個框架,允許在 OpenStack 網絡中同時使用多種 Layer 2 網絡技術,不同的節點可以使用不同的網絡實現機制。 -------------------------------------------------------------------------------------- ML2 對二層網絡進行抽象和建模,引入了 type driver 和 mechansim driver。 這兩類 driver 解耦了 Neutron 所支持的網絡類型(type)與訪問這些網絡類型的機制(mechanism),其結果就是使得 ML2 具有非常好的彈性,易於擴展,能夠靈活支持多種 type 和 mechanism。 Neutron 支持的每一種網絡類型都有一個對應的 ML2 type driver。 type driver 負責維護網絡類型的狀態,執行驗證,創建網絡等。 ML2 支持的網絡類型包括 local, flat, vlan, vxlan 和 gre。 Neutron 支持的每一種網絡機制都有一個對應的 ML2 mechansim driver。 mechanism driver 負責獲取由 type driver 維護的網絡狀態,並確保在相應的網絡設備(物理或虛擬)上正確實現這些狀態。 type 和 mechanisim 都太抽象,現在我們舉一個具體的例子: type driver 為 vlan,mechansim driver 為 linux bridge,我們要完成的操作是創建 network vlan100,那么: 1.vlan type driver 會確保將 vlan100 的信息保存到 Neutron 數據庫中,包括 network 的名稱,vlan ID 等。 2.linux bridge mechanism driver 會確保各節點上的 linux brige agent 在物理網卡上創建 ID 為 100 的 vlan 設備 和 brige 設備,並將兩者進行橋接。 mechanism driver 有三種類型: Agent-based:包括 linux bridge, open vswitch 等。 Controller-based:包括 OpenDaylight, VMWare NSX 等。 基於物理交換機:包括 Cisco Nexus, Arista, Mellanox 等。

Service Plugin / Agent實現的功能:DHCP、Routing、Firewall、Load Balance ================================================================================= DHCP dhcp agent 通過 dnsmasq 為 instance 提供 dhcp 服務。 Routing l3 agent 可以為 project(租戶)創建 router,提供 Neutron subnet 之間的路由服務。路由功能默認通過 IPtables 實現。 Firewall l3 agent 可以在 router 上配置防火牆策略,提供網絡安全防護。另一個與安全相關的功能是 Security Group,也是通過 IPtables 實現。 Firewall 與 Security Group 的區別在於: 1.Firewall 安全策略位於 router,保護的是某個 project 的所有 network。 2.Security Group 安全策略位於 instance,保護的是單個 instance。 Load Balance Neutron 默認通過 HAProxy 為 project 中的多個 instance 提供 load balance 服務。

Neutron 的2種物理部署方案 方案1:控制節點 + 計算節點 控制節點 部署的服務包括:neutron server, core plugin 的 agent 和 service plugin 的 agent。 計算節點 部署 core plugin 的agent,負責提供二層網絡功能。 這里有幾點需要說明: 1. ***core plugin 和 service plugin 已經集成到 neutron server,不需要運行獨立的 plugin 服務。 2. 控制節點和計算節點都需要部署 core plugin 的 agent,因為通過該 agent 控制節點與計算節點才能建立二層連接。 3. 可以部署多個控制節點和計算節點。 -------------------------------------------------------------------- 方案2:控制節點 + 網絡節點 + 計算節點 控制節點 部署 neutron server 服務。 網絡節點 部署的服務包括:core plugin 的 agent 和 service plugin 的 agent。 計算節點 部署 core plugin 的agent,負責提供二層網絡功能。 這個方案的要點是將所有的 agent 從控制節點分離出來,部署到獨立的網絡節點上。 該方案特別適合規模較大的 OpenStack 環境。 1.控制節點只負責通過 neutron server 響應 API 請求。 2.由獨立的網絡節點實現數據的交換,路由以及 load balance等高級網絡服務。 3.可以通過增加網絡節點承擔更大的負載。 4.可以部署多個控制節點、網絡節點和計算節點。
065 - Neutron 功能概述
066 - Neutron 網絡基本概念
067 - Neutron 架構
068 - Neutron 物理部署方案
069 - 理解 Neutron Server 分層模型
070 - Neutron 如何支持多種 network provider
071 - 詳解 ML2 Core Plugin(I)
072 - 詳解 ML2 Core Plugin(II)
073 - Service Plugin / Agent
074 - 兩張圖總結 Neutron 架構