天天看點

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

一、neutron 介紹:

  Neutron 概述 傳統的網絡管理方式很大程度上依賴于管理者手工配置和維護各種網絡硬體裝置;而雲環境下的網絡已經變得非常複雜,特别是在多租戶場景裡,使用者随時都可能需要建立、修改和删除網絡,網絡的連通性和隔離不已經太可能通過手工配置來保證了。   如何快速響應業務的需求對網絡管理提出了更高的要求。傳統的網絡管理方式已經很難勝任這項工作,而“ 軟體定義網絡(software-defined networking, SDN)”所具有的靈活性和自動化優勢使其成為雲時代網絡管理的主流。   Neutron 的設計目标是實作“網絡即服務(Networking as a Service)”。為了達到這一目标,在設計上遵循了基于 SDN 實作網絡虛拟化的原則,在實作上充分利用了 Linux 系統上的各種網絡相關的技術。   SDN 模式服務— NeutronSDN( 軟體定義網絡 ), 通過使用它,網絡管理者和雲計算操作員可以 通過程式來動态定義虛拟網絡裝置。Openstack 網絡中的 SDN 元件就是 Quantum.但因為版權問題而改名為Neutron 。   Neutron網絡基本概念   (1)neutwork network 是一個隔離的二層廣播域。 Neutron 支援多種類型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。   local local 網絡與其他網絡和節點隔離。local 網絡中的 instance 隻能與位于同一節點上同一網絡的 instance 通信,local 網絡主要用于單機測試。   flat flat 網絡是無 vlan tagging 的網絡。flat 網絡中的 instance 能與位于同一網絡的 instance 通信,并且可以跨多個節點。   vlan vlan 網絡是具有 802.1q tagging 的網絡。 vlan 是一個二層的廣播域,同一 vlan 中的 instance 可以通信, 不同 vlan 隻能通過 router 通信。 vlan 網絡可跨節點,是應用最廣泛的網絡類型。   vxlan vxlan 是基于隧道技術的 overlay 網絡。 vxlan 網絡通過唯一的 segmentation ID(也叫 VNI)與其他 vxlan 網絡區分。 vxlan 中資料包會通過 VNI 封裝成 UDP 包進行傳輸。因為二層的包通過封裝在三層傳輸,能夠克服 vlan 和實體網絡基礎設施的限制。   gre gre 是與 vxlan 類似的一種 overlay 網絡。主要差別在于使用 IP 包而非 UDP 進行封裝。   不同 network 之間在二層上是隔離的。   以 vlan 網絡為例,network A 和 network B 會配置設定不同的 VLAN ID,這樣就保證了 network A 中的廣播包不會跑到 network B 中。當然,這裡的隔離是指二層上的隔離, 借助路由器不同 network 是可能在三層上通信的。   network 必須屬于某個 Project( Tenant 租戶),Project 中可以建立多個 network。 network 與 Project 之間是 1對多 關系。   (2)subnet subnet 是一個 IPv4 或者 IPv6 位址段。 instance 的 IP 從 subnet 中配置設定。 每個 subnet 需要定義 IP 位址的範圍和掩碼。   network 與 subnet 是 1對多 關系。一個 subnet 隻能屬于某個 network;一個 network 可以有多個 subnet, 這些 subnet 可以是不同的 IP 段,但不能重疊。下面的配置是有效的: network A   subnet A-a: 10.10.1.0/24  {"start": "10.10.1.1", "end": "10.10.1.50"}                    subnet A-b: 10.10.2.0/24  {"start": "10.10.2.1", "end": "10.10.2.50"}   但下面的配置則無效,因為 subnet 有重疊 network A    subnet A-a: 10.10.1.0/24  {"start": "10.10.1.1", "end": "10.10.1.50"}                     subnet A-b: 10.10.1.0/24  {"start": "10.10.1.51", "end": "10.10.1.100"}   這裡不是判斷 IP 是否有重疊,而是 subnet 的 CIDR 重疊(都是 10.10.1.0/24)。但是, 如果 subnet 在不同的 network 中,CIDR 和 IP 都是可以重疊的,比如 network A    subnet A-a: 10.10.1.0/24  {"start": "10.10.1.1", "end": "10.10.1.50"} network B    subnet B-a: 10.10.1.0/24  {"start": "10.10.1.1", "end": "10.10.1.50"}   這裡大家不免會疑惑: 如果上面的IP位址是可以重疊的,那麼就可能存在具有相同 IP 的兩個 instance,這樣會不會沖突? 簡單的回答是:不會!   具體原因: 因為 Neutron 的 router 是通過 Linux network namespace 實作的。network namespace 是一種網絡的隔離機制。通過它,每個 router 有自己獨立的路由表。上面的配置有兩種結果: 1. 如果兩個 subnet 是通過同一個 router 路由,根據 router 的配置,隻有指定的一個 subnet 可被路由。   2. 如果上面的兩個 subnet 是通過不同 router 路由,因為 router 的路由表是獨立的,是以兩個 subnet 都可以被路由。   (3)port port 可以看做虛拟交換機上的一個端口。 port 上定義了 MAC 位址和 IP 位址,當 instance 的虛拟網卡 VIF(Virtual Interface) 綁定到 port 時,port 會将 MAC 和 IP 配置設定給 VIF。   subnet 與 port 是 1對多 關系。一個 port 必須屬于某個 subnet;一個 subnet 可以有多個 port。   小結   下面總結了 Project,Network,Subnet,Port 和 VIF 之間關系。 Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance  

Neutron 功能

Neutron 為整個 OpenStack 環境提供網絡支援,包括 二層交換,三層路由,負載均衡,防火牆和 VPN 等。 Neutron 提供了一個靈活的架構,通過配置,無論是開源還是商業軟體都可以被用來實作這些功能。  

二層交換 Switching

Nova 的 Instance 是通過虛拟交換機連接配接到虛拟二層網絡的。Neutron 支援多種虛拟交換機,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch(OVS)是一個開源的虛拟交換機,它支援标準的管理接口和協定。   利用 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 優點:

Openstack 中的 SDN 元件架構也屬于可插拔類型。通過 各種插件可以管控不同種類的交換機、路由器、防火牆、負載均衡器并實作 firewall as a service 等許多功能。通過軟體來定義的網絡,可以對整個雲計算設施進行更為精細的掌控。    

Neutron 部署方案

  方案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. 可以部署多個控制節點和計算節點。  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

        方案2: 控制節點 + 網絡節點 + 計算節點 在這個部署方案中,OpenStack 由控制節點,網絡節點和計算節點組成。   控制節點:部署 neutron server 服務。   網絡節點:部署的服務包括:core plugin 的 agent 和 service plugin 的 agent。   計算節點: 部署 core plugin 的agent,負責提供二層網絡功能。   這個方案的 要點是将所有的 agent 從控制節點分離出來,部署到獨立的網絡節點上。

  1. 控制節點隻負責通過 neutron server 響應 API 請求。  
  2. 由 獨立的網絡節點實作資料的交換,路由以及 load balance等進階網絡服務。  
  3. 可以通過 增加網絡節點承擔更大的負載。  
  4. 可以部署多個控制節點、網絡節點和計算節點。

  該方案特别适合規模較大的 OpenStack 環境。  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    配置多個網卡區分不同類型的網絡資料   OpenStack 至少包含下面幾類網絡流量 Management API VM External  

Management 網絡

用于節點之間 message queue 内部通信以及通路 database 服務,所有的節點都需要連接配接到 management 網絡。

API 網絡

OpenStack 各元件通過該網絡向使用者暴露 API 服務。Keystone, Nova, Neutron, Glance, Cinder, Horizon 的 endpoints 均配置在 API 網絡上。通常 ,管理者也通過 API 網絡 SSH 管理各個節點。  

VM 網絡(租戶網絡)

VM 網絡也叫 tenant 網絡, 用于 instance 之間通信。 VM 網絡可以選擇的類型包括 local, flat, vlan, vxlan 和 gre。 VM 網絡 由 Neutron 配置和管理。  

External 網絡

External 網絡指的是 VM 網絡之外的網絡,該網絡不由 Neutron 管理。 Neutron 可以将 router attach 到 External 網絡,為 instance 提供通路外部網絡的能力。 External 網絡可能是企業的 intranet,也可能是 internet。   這幾類網絡隻是邏輯上的劃分,實體實作上有非常大的自由度。   我們 可以為每種網絡配置設定單獨的網卡;也可以多種網絡共同使用一個網卡;為提高帶寬和硬體備援,可以使用 bonding 技術将多個實體網卡綁定成一個邏輯的網卡   我們的實驗環境采用下面的網卡配置設定方式:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    1. 控制節點 3 網卡(eth0, eth1, eth2),計算節點 2 網卡(eth0, eth1)。 2. 合并 Management 和 API 網絡,使用 eth0 3. VM 網絡使用 eht1。 4. 控制節點的 eth2 與 External 網絡連接配接   實體拓撲:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  分割線上方的網絡由網絡管理者(就是我們啦)配置。 主要涉及 Management, API 和 external 網絡。 配置的内容包括節點上的實體網卡,實體交換機和外部路由器,防火牆以及實體連線等   分割線下方是 VM 網絡,由 Neutron 管理。 我們隻需要通過 Web GUI 或者 CLI 操作,Neutron 會負責實作。              

二、neutron 架構

Nuetron 架構 與 OpenStack 的其他服務的設計思路一樣, Neutron 也是采用分布式架構,由 多個元件(子服務)共同對外提供網絡服務。  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

Neutron 由如下元件構成:  

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 等。  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  Neutron 架構非常靈活,層次較多,目的是:

  1. 為了支援各種現有或者将來會出現的優秀網絡技術。  
  2. 支援分布式部署,獲得足夠的擴充性。

通常魚和熊掌不能兼得,雖然獲得了這些優勢,但這樣使得 Neutron 更加複雜,更不容易了解。 後面我們會詳細讨論 Neutron 的各個元件,但在這之前,非常有必要先通過一個例子了解這些元件各自的職責以及是如何協同工作。   以建立一個 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 裝置。
  1. plugin 解決的是 What 的問題,即網絡要配置成什麼樣子?而至于如何配置 How 的工作則交由 agent 完成。  
  2. plugin,agent 和 network provider 是配套使用的,比如上例中 network provider 是 linux bridge,那麼就得使用 linux bridge 的 plungin 和 agent;如果 network provider 換成了 OVS 或者實體交換機,plugin 和 agent 也得替換。  
  3. plugin 的一個主要的職責是在資料庫中維護 Neutron 網絡的狀态資訊,這就造成一個問題:所有 network provider 的 plugin 都要編寫一套非常類似的資料庫通路代碼。為了解決這個問題,Neutron 在 Havana 版本實作了一個 ML2(Modular Layer 2)plugin,對 plgin 的功能進行抽象和封裝。有了 ML2 plugin,各種 network provider 無需開發自己的 plugin,隻需要針對 ML2 開發相應的 driver 就可以了,工作量和難度都大大減少。ML2 會在後面詳細讨論。  
  4. plugin 按照功能分為兩類: core plugin 和 service plugin。core plugin 維護 Neutron 的 netowrk, subnet 和 port 相關資源的資訊,與 core plugin 對應的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服務,也有相應的 agent。後面也會分别詳細讨論。

三、neutron server 元件詳解:

  Neutron server 分層模型

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

上圖是 Neutron Server 的分層結構,至上而下依次為:   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。   歸納起來,Neutron Server 包括兩部分: 1. 提供 API 服務。 2. 運作 Plugin。   即 Neutron Server = API + Plugins

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  明白了 Neutron Server 的分層模型,我們就更容易了解 Neutron 是如何支援多種 network provider。    

四、ML2 Core Plugin 詳解:

  Neutron 是如何支援多種 network provider?   上節提到 Core Plugin,其功能是維護資料庫中 network, subnet 和 port 的狀态,并負責調用相應的 agent 在 network provider 上執行相關操作,比如建立 network。 openstack中有兩大常見 Core Plugin: linux bridge plugin 和 open vswitch plugin。 Neutron 可以通過開發不同的 plugin 和 agent 支援不同的網絡技術。這是一種相當開放的架構。不過随着支援的 network provider 數量的增加,開發人員發現了兩個突出的問題:       1. 隻能在 OpenStack 中使用一種 core plugin,多種 network provider 無法共存。            隻使用一個 core plugin 本身沒有問題。但問題在于傳統的 core plugin 與 core plugin agent 是一一對應的。也就是說,如果選擇了 linux bridge plugin,那麼 linux bridge agent 将是唯一選擇,就必須在 OpenStack 的所有節點上使用 linux bridge 作為虛拟交換機(即 network provider)。           同樣的,如果選擇 open vswitch plugin, 所有節點上隻能使用 open vswitch,而不能使用其他的 network provider。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

        2. 不同 plugin 之間存在大量重複代碼,開發新的 plugin 工作量大。 所有傳統的 core plugin 都需要編寫大量重複和類似的資料庫通路的代碼,大大增加了 plugin 開發和維護的工作量。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  ML2 能解決傳統 core plugin 的問題   Moduler Layer 2(ML2):是 Neutron 在 Havana 版本實作的一個新的 core plugin,用于替代原有的 linux bridge plugin 和 open vswitch plugin。 作為新一代的 core plugin,提供了一個架構,允許在 OpenStack 網絡中同時使用多種 Layer 2 網絡技術,不同的節點可以使用不同的網絡實作機制。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

如上圖所示,采用 ML2 plugin 後,可以在不同節點上分别部署 linux bridge agent, open vswitch agent, hyper-v agent 或其他第三方 agent。 ML2 不但支援異構部署方案,同時能夠與現有的 agent 無縫內建:以前用的 agent 不需要變,隻需要将 Neutron server 上的傳統 core plugin 替換為 ML2。 有了 ML2,要支援新的 network provider 就變得簡單多了:無需從頭開發 core plugin,隻需要開發相應的 mechanism driver,大大減少了要編寫和維護的代碼。   ML2 Core Plugin 詳解: ML2 對二層網絡進行抽象和模組化,引入了 type driver 和 mechansim driver。這兩類 driver 解耦了 Neutron 所支援的網絡類型(type)與通路這些網絡類型的機制(mechanism),其結果就是使得 ML2 具有非常好的彈性,易于擴充,能夠靈活支援多種 type 和 mechanism。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

(1) Type Driver   Neutron 支援的每一種網絡類型都有一個對應的 ML2 type driver。 type driver 負責維護網絡類型的狀态,執行驗證,建立網絡等。 ML2 支援的網絡類型包括 local, flat, vlan, vxlan 和 gre。 我們将在後面章節詳細讨論每種 type。   (2) Mechansim Driver 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 等。 比如前面那個例子如果換成 Cisco 的 mechanism driver,則會在 Cisco 實體交換機的指定 trunk 端口上添加 vlan100。     本教程讨論的 mechanism driver 将涉及 linux bridge, open vswitch 和 L2 population。   linux bridge 和 open vswitch 的 ML2 mechanism driver 作用是配置各節點上的虛拟交換機。linux bridge driver 支援的 type 包括 local, flat, vlan, and vxlan。open vswitch driver 除這 4 種 type 還支援 gre。   L2 population driver 作用是優化和限制 overlay 網絡中的廣播流量。 vxlan 和 gre 都屬于 overlay 網絡。   ML2 core plugin 已經成為 OpenStack Neutron 的首選 plugin,本教程後面會讨論如何在實驗環境中配置 ML2 的各種 type 和 mechansim。      

五、Service Plugin / Agent 詳解:

  Core Plugin/Agent 負責管理核心實體:net, subnet 和 port。而對于更進階的網絡服務,則由 Service Plugin/Agent 管理。   Service Plugin 及其 Agent 提供更豐富的擴充功能,包括路由,load balance,firewall等,如圖所示:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

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。

Firewall 與 Security Group 後面會詳細分析。   Load Balance Neutron 預設通過 HAProxy 為 project 中的多個 instance 提供 load balance 服務。   後面的章節會結合 linux bridge 和 open vswitch 詳細讨論每一種 service。       五、 Neutron 架構架構總結:   前面我們詳細讨論了 Neutron 架構,包括 Neutron Server,Core 和 Service Agent。現在用兩張圖做個總結。   第一張:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

與 OpenStack 其他服務一樣,Neutron 采用的是分布式架構,包括 Neutorn Server、各種 plugin/agent、database 和 message queue。 1. Neutron server 接收 api 請求。 2. plugin/agent 實作請求。 3. database 儲存 neutron 網絡狀态。 4. message queue 實作元件之間通信。   metadata-agent 之前沒有講到,這裡做個補充:          instance 在啟動時需要通路 nova-metadata-api 服務擷取 metadata 和 userdata,這些 data 是該 instance 的定制化資訊,比如 hostname, ip, public key 等。   但 instance 啟動時并沒有 ip,那如何通過網絡通路到 nova-metadata-api 服務呢?   答案就是 neutron-metadata-agent 該 agent 讓 instance 能夠通過 dhcp-agent 或者 l3-agent 與 nova-metadata-api 通信       如果我們将 Neutron 架構展開,則會得到下面第二張圖:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端
  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— 網絡實踐

  一、虛拟機擷取 ip:   用 namspace 隔離 DHCP 服務   Neutron 通過 dnsmasq 提供 DHCP 服務,而 dnsmasq 通過 Linux Network Namespace 獨立的為每個 network 服務隔離 在二層網絡上,VLAN 可以将一個實體交換機分割成幾個獨立的虛拟交換機。類似地,在三層網絡上,Linux network namespace 可以将一個實體三層網絡分割成幾個獨立的虛拟三層網絡。 每個 namespace 都有自己獨立的網絡棧,包括 route table,firewall rule,network interface device 等。 Neutron 通過 namespace 為每個 network 提供獨立的 DHCP 和路由服務,進而允許租戶建立重疊的網絡。如果沒有 namespace,網絡就不能重疊,這樣就失去了很多靈活性。 每個 dnsmasq 程序都位于獨立的 namespace, 命名為 qdhcp-<network id>,例如 flat_net:  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  ip netns list         指令列出所有的 namespace ip netns exec <network namespace name> <command>        管理 namespace   root namespace: 其實,主控端本身也有一個 namespace,叫 root namespace,擁有所有實體和虛拟 interface device。實體 interface 隻能位于 root namespace。 新建立的 namespace 預設隻有一個 loopback device。管理者可以将虛拟 interface,例如 bridge,tap 等裝置添加到某個 namespace。 對于 flat_net 的 DHCP 裝置 tap19a0ed3d-fe,需要将其放到 namespace qdhcp-7bf09be4-8653-4869-84f0-33494f238627 中,但這樣會帶來一個問題:tap19a0ed3d-fe 将無法直接與 root namespace 中的 bridge 裝置 brqf153b42f-c3 連接配接。   Neutron 使用 veth pair 解決了這個問題。 veth pair 是一種成對出現的特殊網絡裝置,它們象一根虛拟的網線,可用于連接配接兩個 namespace。向 veth pair 一端輸入資料,在另一端就能讀到此資料。 tap19a0ed3d-fe 與 ns-19a0ed3d-fe 就是一對 veth pair,它們将 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 連接配接到 brqf153b42f-c3。 如下圖所示:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    可以通過 ip netns exec qdhcp-7bf09be4-8653-4869-84f0-33494f238627 ip a指令檢視ns-ba07bb93配置:  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    擷取 dhcp IP 過程分析   在建立 instance 時,Neutron 會為其配置設定一個 port,裡面包含了 MAC 和 IP 位址資訊。這些資訊會同步更新到 dnsmasq 的 host 檔案。如下圖所示:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  同時 nova-compute 會設定虛機 VIF 的 MAC 位址。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端
openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  一切準備就緒,instance 擷取 IP 的過程如下:   1. vm 開機啟動,發出 DHCPDISCOVER 廣播,該廣播消息在整個 net 中都可以被收到。   2. 廣播到達 veth tap19a0ed3d-fe,然後傳送給 veth pair 的另一端 ns-19a0ed3d-fe。dnsmasq 在它上面監聽,dnsmasq 檢查其 host 檔案,發現有對應項,于是dnsmasq 以  DHCPOFFER 消息将 IP(192.168.254.18)、子網路遮罩(255.255.255.0)、位址租用期限等資訊發送給 vm。   3. vm 發送 DHCPREQUEST 消息确認接受此 DHCPOFFER。   4. dnsmasq 發送确認消息 DHCPACK,整個過程結束。   二、VXLAN簡介:   overlay network概念:   overlay network 是指建立在其他網絡上的網絡。overlay network 中的節點可以看作通過虛拟(或邏輯)鍊路連接配接起來的。overlay network 在底層可能由若幹實體鍊路組成,但對于節點,不需要關心這些底層實作。   例如 P2P 網絡就是 overlay network,隧道也是。vxlan 和 gre 都是基于隧道技術實作的,它們也都是 overlay network。   目前 linux bridge 隻支援 vxlan,不支援 gre; open vswitch 兩者都支援。vxlan 與 gre 實作非常類似,而且 vxlan 用得較多,是以本教程隻介紹 vxlan。     VXLAN簡介: VXLAN 為 Virtual eXtensible Local Area Network。正如名字所描述的,VXLAN 提供與 VLAN 相同的以太網二層服務,但擁有更強的擴充性和靈活性。與 VLAN 相比, VXLAN 有下面幾個優勢: 1. 支援更多的二層網段。 VLAN 使用 12-bit 标記 VLAN ID,最多支援 4094 個 VLAN,這對大型雲部署會成為瓶頸。VXLAN 的 ID (VNI 或者 VNID)則用 24-bit 标記,支援 16777216 個二層網段。 2. 能更好地利用已有的網絡路徑。 VLAN 使用 Spanning Tree Protocol 避免環路,這會導緻有一半的網絡路徑被 block 掉。VXLAN 的資料包是封裝到 UDP 通過三層傳輸和轉發的,可以使用所有的路徑。 3. 避免實體交換機 MAC 表耗盡。 由于采用隧道機制,TOR (Top on Rack) 交換機無需在 MAC 表中記錄虛拟機的資訊。     VXLAN 封裝和包格式: VXLAN 是将二層建立在三層上的網絡。通過将二層資料封裝到 UDP 的方式來擴充資料中心的二層網段數量。 VXLAN 是一種在現有實體網絡設施中支援大規模多租戶網絡環境的解決方案。VXLAN 的傳輸協定是 IP + UDP。 VXLAN 定義了一個 MAC-in-UDP 的封裝格式。在原始的 Layer 2 網絡包前加上 VXLAN header,然後放到 UDP 和 IP 包中。通過 MAC-in-UDP 封裝,VXLAN 能夠在 Layer 3 網絡上建立起了一條 Layer 2 的隧道。   VXLAN 包的格式如下:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  如上圖所示,VXLAN 引入了 8-byte VXLAN header,其中 VNI 占 24-bit。VXLAN 和原始的 L2 frame 被封裝到 UDP 包中。這 24-bit 的 VNI 用于标示不同的二層網段,能夠支援 16777216 個 LAN。     VXLAN Tunnel Endpoint   VXLAN 使用 VXLAN tunnel endpoint (VTEP) 裝置處理 VXLAN 的封裝和解封。每個 VTEP 有一個 IP interface,配置了一個 IP 位址。VTEP 使用該 IP 封裝 Layer 2 frame,并通過該 IP interface 傳輸和接收封裝後的 VXLAN 資料包。 下面是 VTEP 的示意圖:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  VXLAN 獨立于底層的網絡拓撲;反過來,兩個 VTEP 之間的底層 IP 網絡也獨立于 VXLAN。VXLAN 資料包是根據外層的 IP header 路由的,該 header 将兩端的 VTEP IP 作為源和目标 IP。       VXLAN 封裝和轉發包的過程,以及 Linux 對 VXLAN 的原生支援 VXLAN 包轉發流程 VXLAN 在 VTEP 間建立隧道,通過 Layer 3 網絡傳輸封裝後的 Layer 2 資料。下面例子示範了資料如何在 VXLAN 上傳輸:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

圖中 Host-A 和 Host-B 位于 VNI 10 的 VXLAN,通過 VTEP-1 和 VTEP-2 之間建立的 VXLAN 隧道通信。資料傳輸過程如下: 1. Host-A 向 Host-B 發送資料時,Host-B 的 MAC 和 IP 作為資料包的目标 MAC 和 IP,Host-A 的 MAC 作為資料包的源 MAC 和 IP,然後通過 VTEP-1 将資料發送出去。 2. VTEP-1 從自己維護的映射表中找到 MAC-B 對應的 VTEP-2,然後執行 VXLAN 封裝,加上 VXLAN 頭,UDP 頭,以及外層 IP 和 MAC 頭。此時的外層 IP 頭,目标位址為 VTEP-2 的 IP,源位址為 VTEP-1 的 IP。同時由于下一跳是 Router-1,是以外層 MAC 頭中目标位址為 Router-1 的 MAC。 3. 資料包從 VTEP-1 發送出後,外部網絡的路由器會依據外層 IP 頭進行路由,最後到達與 VTEP-2 連接配接的路由器 Router-2。 4. Router-2 将資料包發送給 VTEP-2。VTEP-2 負責解封資料包,依次去掉外層 MAC 頭,外層 IP 頭,UDP 頭 和 VXLAN 頭。VTEP-2 依據目标 MAC 位址将資料包發送給 Host-B。 上面的流程我們看到 VTEP 是 VXLAN 的最核心元件,負責資料的封裝和解封。隧道也是建立在 VTEP 之間的,VTEP 負責資料的傳送。   VTEP 是如何提前獲知 IP -- MAC -- VTEP 相關資訊的呢? 答案是: 1. Neutron 知道每一個 port 的狀态和資訊; port 儲存了 IP,MAC 相關資料。 2. instance 啟動時,其 port 狀态變化過程為:down -> build -> active。 3. 每當 port 狀态發生變化時,Neutron 都會通過 RPC 消息通知各節點上的 Neutron agent,使得 VTEP 能夠更新 VM 和 port 的相關資訊。 VTEP 可以根據這些資訊判斷出其他 Host 上都有哪些 VM,以及它們的 MAC 位址,這樣就能直接與之通信,進而避免了不必要的隧道連接配接和廣播。   Linux 對 VXLAN 的支援 VTEP 可以由專有硬體來實作,也可以使用純軟體實作。目前比較成熟的 VTEP 軟體實作包括: 1. 帶 VXLAN 核心子產品的 Linux 2. Open vSwitch 我們先來看 Linux 如何支援 VXLAN

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

實作方式: 1. Linux vxlan 建立一個 UDP Socket,預設在 8472 端口監聽。   2. Linux vxlan 在 UDP socket 上接收到 vxlan 包後,解包,然後根據其中的 vxlan ID 将它轉給某個 vxlan interface,然後再通過它所連接配接的 linux bridge 轉給虛機。   3. Linux vxlan 在收到虛機發來的資料包後,将其封裝為多點傳播 UDP 包,從網卡發出。       ML2 mechanism driver: Linux Bridge 和 Open vSwitch   網卡配置設定示例:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端
  1. 控制節點三個網卡(eth0, eth1, eth2),計算節點兩網卡(eth0, eth1)。
  2. 合并 Management 和 API 網絡,使用 eth0,IP 段為 192.168.104.0/24。
  3. VM 網絡使用 eht1。
  4. 控制節點的 eth2 與 External 網絡連接配接,IP 段為 10.10.10.0/24。

  Linux Bridge :  

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    Open vSwitch:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  Open vSwitch 中的網絡裝置: br-ex:連接配接外部(external)網絡的網橋。 br-int:內建(integration)網橋,所有 instance 的虛拟網卡和其他虛拟網絡裝置都将連接配接到該網橋。 br-tun:隧道(tunnel)網橋,基于隧道技術的 VxLAN 和 GRE 網絡将使用該網橋進行通信。 tap interface:命名為 tapXXXX。 linux bridge:命名為 qbrXXXX。 veth pair:命名為 qvbXXXX, qvoXXXX OVS integration bridge:命名為 br-int。 OVS patch ports:命名為 int-br-ethX 和 phy-br-ethX(X 為 interface 的序号)。 OVS provider bridge:命名為 br-ethX(X 為 interface 的序号)。 實體 interface:命名為 ethX(X 為 interface 的序号)。 OVS tunnel bridge:命名為 br-tun。     三、三層網絡介紹: 虛拟機通路外網   (1)虛拟機中通路一個外網位址192.168.253.3,并用 traceroute 指令跟蹤路由檢視:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  (2)根據網絡拓撲,由于虛機通路外網要經過本網段的網關192.168.101.1,然後經過路由的外網接口轉發出去,到達192.168.253.3

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  檢視路由命名空間: ip netns list

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  (3)檢視路由命名空間的網絡配置,查到路由連接配接外網的端口和ip: ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 ip a

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

路由上的外網端口正好接到外網網橋br-ex上:ovs-vsctl show 檢視

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

  (4)檢視路由iptables NAT 轉發規則,記錄對私網做的SNAT ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 iptables -t nat -L ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 iptables -t nat -S

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

規則解釋: -A neutron-l3-agent-snat -o qg-8df29d32-d6 -j SNAT --to-source 192.168.253.65 記錄了流入接口qg-8df29d32-d6 的資料包做SNAT(基于源位址轉發),将源位址修改為192.168.253.65   (5)驗證: 在虛機 ping 192.168.253.3 時, 可以通過 tcpdump 分别觀察 router 兩個 interface 的 icmp 資料包來驗證 SNAT 的行為: 在路由qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1,可查到私有網絡的網關接口qr-7b56f58b-b5,并在路由中抓取網關接口的icmp包: ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 tcpdump -i qr-7b56f58b-b5 -n icmp

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

在路由中,抓取路由的外網接口qg-8df29d32-d6的icmp包: ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 tcpdump -i qg-8df29d32-d6 -n icmp

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

    外網通路虛機——floating ip原理   SNAT 讓 instance 能夠直接通路外網,但外網還不能直接通路 instance。因為 instance 沒有外網 IP。這裡 “直接通路 instance” 是指通信連接配接由外網發起,例如從外網 SSH 執行個體。   (1)首先将執行個體綁定浮動 ip192.168.253.66, floating IP 是配置在 router 的外網 interface 上的,再檢視 router 的 interface 配置:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

(2)在執行個體中ping 192.168.253.3 外網位址,在路由的qr-7b56f58b-b5 接口上,執行個體通路外網ip,外網ip将資料包轉發回執行個體ip;但在路由的qg-8df29d32-d6 接口上,始終是通過 floating IP 192.168.253.66 與外網通信。

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

(3) 原因是在路由中iptables做了DNA T(基于目的位址轉發),檢視 router 的 NAT 規則:

openstack——neutron網絡服務一、neutron 介紹:Neutron 功能Neutron 部署方案二、neutron 架構三、neutron server 元件詳解:四、ML2 Core Plugin 詳解:五、Service Plugin / Agent 詳解:             neutron— 網絡實踐compute端

當 router 接收到從外網發來的包,如果目的位址是 floating IP 192.168.254.66,将目的位址修改為執行個體的 IP 192.168.101.3。這樣外網的包就能送達到執行個體; 當執行個體發送資料到外網,源位址 192.168.101.3 将被修改為 floating IP 192.168.253.66;       四:neutron配置檔案:   neutron.conf [DEFAULT] state_path = /var/lib/neutron auth_strategy = keystone core_plugin = ml2 service_plugins = router dhcp_agent_notification = true allow_overlapping_ips = True notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true transport_url =  rabbit://openstack:[email protected]   [agent]   [cors]   [cors.subdomain]   [database] connection = mysql+ pymysql://neutron:[email protected]/neutron   [keystone_authtoken] auth_uri =  http://controller:5000 auth_url =  http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = neutron   [matchmaker_redis]   [nova] region_name = RegionOne auth_url =  http://controller:35357 auth_type = password project_domain_name = default project_name = service user_domain_name = default username = nova password = nova   [oslo_concurrency] lock_path = $state_path/lock   [oslo_messaging_amqp]   [oslo_messaging_kafka]   [oslo_messaging_notifications]   [oslo_messaging_rabbit]   [oslo_messaging_zmq]   [oslo_middleware]   [oslo_policy]   [qos]   [quotas]   [ssl]     ml2_conf.ini [DEFAULT]   [ml2] type_drivers = flat,vxlan tenant_network_types = vxlan mechanism_drivers = openvswitch,l2population extension_drivers = port_security   [ml2_type_flat]   [ml2_type_geneve]   [ml2_type_gre]   [ml2_type_vlan]   [ml2_type_vxlan] vni_ranges = 1:1000   [securitygroup] enable_ipset = true   openvswitch_agent.ini [DEFAULT]   [agent] tunnel_types = vxlan l2_population = True   [ovs] tunnel_bridge = br-tun local_ip = 192.168.254.63 bridge_mappings =   [securitygroup] firewall_driver = iptables_hybrid enable_security_group = true   [xenapi]     l3_agent.ini [DEFAULT] interface_driver = openvswitch external_network_bridge = br-ex   [agent]   [ovs]   metadata_agent.ini [DEFAULT] nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET   [agent]   [cache]   dhcp_agent.ini [DEFAULT] interface_driver = openvswitch dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true   [agent]   [ovs]   注意:配置完配置檔案後,提前準備ovs外網用的網橋,之後同步資料庫,啟動服務: (控制)yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y   systemctl enable neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service   systemctl start neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service   ovs-vsctl add-br br-ex   ovs-vsctl add-port br-ex eth2   systemctl enable neutron-l3-agent.service   systemctl start neutron-l3-agent.service   (計算)yum install openvswitch openstack-neutron-openvswitch ebtables ipset systemctl enable openvswitch neutron-openvswitch-agent systemctl start openvswitch neutron-openvswitch-agent systemctl stop openvswitch neutron-openvswitch-agent         五、部署neutron服務  

點進networkservice——installation and configure controller

1)建立neutron資料庫

CREATE DATABASE neutron;      

2) 增加使用者neutron并授權以及設定密碼

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';      
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';      

3)聲明變量建立neutron使用者,設定密碼為neutron

source openrc      
openstack user create --domain default --password=neutron neutron      

4)給neutron使用者增加管理者權限

openstack role add --project service --user neutron admin      

5)建立一個服務叫neutron

openstack service create --name neutron \
  --description "OpenStack Networking" network      

6)建立基于neutron服務的三個服務端點

openstack endpoint create --region RegionOne \
  network public http://controller:9696      

點進 Networking Option 2: Self-service networks(自定義網絡)

1)安裝neutron相關的元件

yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y

2)編輯配置檔案,安裝上面所給模闆複制即可

除了openvswitch_agent.ini檔案中的loca_ip改為第二個網卡的ip,其他無需更改。

/etc/neutron/neutron.conf

/etc/neutron/plugins/ml2/ml2_conf

/etc/neutron/plugins/ml2/openvswitch_agent.ini

/etc/neutron/l3_agent.ini

/etc/neutron/dhcp_agent.ini

點進Return to Networking controller node configuration.

配置 /etc/neutron/metadata_agent.ini

和/etc/nova/nova.conf

将以下注釋取消

neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET      

8) 建立軟連接配接

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini      

9)同步資料庫

su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron      

10)重新開機openstck-nova-api服務

systemctl restart openstack-nova-api.service      

11)重新開機neutron相關服務

systemctl enable neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service

systemctl start neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service

ovs-vsctl add-br br-ex   ovs-vsctl add-port br-ex  ens38(第二個網卡)   systemctl enable neutron-l3-agent.service   systemctl start neutron-l3-agent.service

 openstack  network agent list

如果都是up狀态即為成功。

[[email protected] ml2]# openstack network agent list
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 4d19afb8-0bd3-48c0-8e13-cd23e4e1af80 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
| 70950269-2093-48f9-8413-d0fb7f0fe891 | Open vSwitch agent | controller | None              | True  | UP    | neutron-openvswitch-agent |
| 75c928bb-c9a3-4b84-ad7a-6ec00ff2fd68 | L3 agent           | controller | nova              | True  | UP    | neutron-l3-agent          |
| 79e52de1-c161-4746-96a9-c42865f734fe | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| ef9dfc97-c28b-4604-bfed-66821b6824ff | Open vSwitch agent | compute    | None              | True  | UP    | neutron-openvswitch-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+      

compute端

點進Install and configure compute node

1)安裝所需組建

yum install openvswitch openstack-neutron-openvswitch ebtables ipset

2)編輯配置檔案

/etc/neutron/neutron.conf

點進Networking Option 2: Self-service networks

vim /etc/neutron/plugins/ml2/openswitch_agent.ini

将local_ip改為第二個網卡的ip

vim /etc/nova/nova.conf

取消以下注釋

[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS      

3) 重新開機相關服務

systemctl restart openstack-nova-compute.service

systemctl enable openvswitch neutron-openvswitch-agent      

4)檢視安裝情況neutron service

 host有compute顯示并且up狀态就算成功。

[[email protected] ml2]# openstack network agent list
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 4d19afb8-0bd3-48c0-8e13-cd23e4e1af80 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
| 70950269-2093-48f9-8413-d0fb7f0fe891 | Open vSwitch agent | controller | None              | True  | UP    | neutron-openvswitch-agent |
| 75c928bb-c9a3-4b84-ad7a-6ec00ff2fd68 | L3 agent           | controller | nova              | True  | UP    | neutron-l3-agent          |
| 79e52de1-c161-4746-96a9-c42865f734fe | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| ef9dfc97-c28b-4604-bfed-66821b6824ff | Open vSwitch agent | compute    | None              | True  | UP    | neutron-openvswitch-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+      

報錯:

很多時候電腦重新啟動後,compute節點的neutron服務會down掉或者alive狀态欄顯示false,這大多因為controller節點的rabbitmq服務無法正常運作,盡管服務狀态時啟動的。

造成這一報錯的主要原因就是防火牆iptables規則。

我們在controller節點上設定如下規則:

iptables -I INPUT -p tcp --dport 5672 -j ACCEPT

給端口号是5672的設定為白名單。

轉載于:https://www.cnblogs.com/zzzynx/p/10981154.html