OpenStack之Neutron理论部分
目錄
- 相關(guān)概念
- 一、Neutron網(wǎng)絡項目
- 二、Linux虛擬網(wǎng)絡
- 三、openstack網(wǎng)絡基礎(chǔ)服務
- 1、Neutron網(wǎng)絡結(jié)構(gòu)
- 2、網(wǎng)絡子網(wǎng)和端口
- 3、網(wǎng)絡拓撲類型
- 4、網(wǎng)絡基本架構(gòu)
- 5、Neutron-server
- 四、Neutron主要插件、代理和服務
- 1、典型的主機節(jié)點部署
- 2、ML2插件
- 3、Linux Bridge代理
- 4、Open vSwitch代理
- 5、DHCP代理
- 6、Linux網(wǎng)絡名稱空間(租戶)
- 7、Neutron路由器
- 8、L3代理
- (1)路由(routing)
- (2)通過網(wǎng)絡名稱空間支持網(wǎng)絡重疊
- (3)源地址轉(zhuǎn)換(SNAT)
- (4)目的地址轉(zhuǎn)換(DNAT)
- (5)安全組(Security Group)
- 9、FWaas(虛擬防火墻)
- 五、Neutron網(wǎng)絡配置和管理
- 1、提供者網(wǎng)絡
- 2、自服務網(wǎng)絡
相關(guān)概念
一、Neutron網(wǎng)絡項目
- Neutron是openstack核心項目之一,提供云計算環(huán)境下的虛擬網(wǎng)絡功能。
- Neutron為整個openstack環(huán)境提供軟件定義網(wǎng)絡支持
- 主要功能包括二層交換、三層路由、防火墻、VPN, 以及負載均衡等。
- Neutron在由其他openstack服務 (如nova)管理的網(wǎng)絡接口設備 (如虛擬網(wǎng)卡)之間提供網(wǎng)絡連接即服務。
二、Linux虛擬網(wǎng)絡
linux網(wǎng)絡虛擬化
Neutron最核心的任務:對二層物理網(wǎng)絡進行抽象和管理
傳統(tǒng)物理網(wǎng)絡與虛擬化網(wǎng)絡的區(qū)別
- 傳統(tǒng)物理網(wǎng)絡
- 使用多個物理服務器
- 使用物理網(wǎng)絡設置
- 虛擬化網(wǎng)絡
- 將多個虛擬機部署在一臺物理服務器,減少了物理服務器的數(shù)量
- 虛擬機由虛擬機管理器(Hypervisor)統(tǒng)一管理
- 在Linux系統(tǒng)中Hypervisor通常采用kvm。
- 網(wǎng)絡虛擬化,減少了物理網(wǎng)絡設置的數(shù)量
- Hypervisor為虛擬機創(chuàng)建一個或多個虛擬網(wǎng)卡(vNIC),虛擬網(wǎng)卡等同于虛擬機的物理網(wǎng)卡。
- 物理交換機在虛擬網(wǎng)絡中被虛擬為虛擬交換機(vSwitch)
- 虛擬機的虛擬網(wǎng)卡連接到虛擬交換機上,虛擬機交換機再通過物理主機的物理網(wǎng)卡連接到外部網(wǎng)絡。
- 將多個虛擬機部署在一臺物理服務器,減少了物理服務器的數(shù)量
- 對于物理網(wǎng)絡來說,虛擬化的主要工作是對網(wǎng)卡和交換設備的虛擬化。
網(wǎng)絡虛擬化中幾個關(guān)鍵的組件
- 虛擬網(wǎng)橋(即虛擬交換機)
- 網(wǎng)橋接口連著虛擬網(wǎng)卡,網(wǎng)橋接口名稱通常以vnet開頭;
- 例:虛擬網(wǎng)卡1連接vnet0,虛擬網(wǎng)卡2連接vnet1,虛擬網(wǎng)卡3連接vnet2
- 網(wǎng)橋接口連著虛擬網(wǎng)橋,虛擬網(wǎng)橋以br開頭;
- 例如vnet0和vnet1連接br1,vnet2連接br2
- 虛擬網(wǎng)橋分別連著物理主機的物理網(wǎng)卡;
- 例如br1連接物理網(wǎng)卡1,br2連著物理網(wǎng)卡2
- 網(wǎng)橋接口連著虛擬網(wǎng)卡,網(wǎng)橋接口名稱通常以vnet開頭;
- 虛擬局域網(wǎng)(即vlan)
- 防止廣播風暴的產(chǎn)生
- 劃分VLAN區(qū)域,一個VLAN含有多臺虛擬機,一個VLAN的虛擬機相當于連接同一網(wǎng)橋
- 虛擬化環(huán)境中,會將網(wǎng)橋劃分到不同的VLAN中
- VLAN的協(xié)議是802.1Q
- 開放虛擬交換機(open vSwitch)
- 和硬件交換機擁有一樣的特性,可以在不同虛擬平臺上移植
- 在虛擬交換機上使用open vSwitch技術(shù),可以使虛擬網(wǎng)絡的管理、網(wǎng)絡狀態(tài)和流量的監(jiān)控更加的輕松
- 可以在云環(huán)境中的虛擬化平臺上實現(xiàn)分布式虛擬交換機
- 也可以將不同主機上的open vSwitch交換機連接起來,形成一個大規(guī)模的虛擬網(wǎng)絡
三、openstack網(wǎng)絡基礎(chǔ)服務
OpenStack網(wǎng)絡服務提供一個API讓用戶在云中建立和定義網(wǎng)絡連接。該網(wǎng)絡服務的項目名稱是Neutron。OpenStack網(wǎng)絡負責創(chuàng)建和管理虛擬網(wǎng)絡基礎(chǔ)架構(gòu),包括網(wǎng)絡、交換機、子網(wǎng)和路由器,這些設備由OpenStack計算服務Nova管理。同時,網(wǎng)絡服務還提供防火墻和VPN這樣的高級服務。可以將網(wǎng)絡服務部署到特定主機上。OpenStack網(wǎng)絡組件與身份服務、計算服務和儀表板等多個OpenStack組件進行整合
1、Neutron網(wǎng)絡結(jié)構(gòu)
一個簡化的典型的Neutron網(wǎng)絡結(jié)構(gòu),包括一個外部網(wǎng)絡、一個內(nèi)部網(wǎng)絡和一個路由器。
- 外部網(wǎng)絡:負責連接OpenStack項目之外的網(wǎng)絡環(huán)境,又稱公共網(wǎng)絡。
- 與其他網(wǎng)絡不同,它不僅僅是一個虛擬網(wǎng)絡,更重要的是,它表示OpenStack網(wǎng)絡能被外部物理網(wǎng)絡接入并訪問。
- 外部網(wǎng)絡可能是企業(yè)的局域網(wǎng)(Intranet),也可能是互聯(lián)網(wǎng)(Internet) ,這類網(wǎng)絡并不是由Neutron直接管理。
- 內(nèi)部網(wǎng)絡:完全由軟件定義,又稱私有網(wǎng)絡。
- 它是虛擬機實例所在的網(wǎng)絡,能夠直接連接到虛擬機。
- 項目用戶可以創(chuàng)建自己的內(nèi)部網(wǎng)絡。
- 默認情況下,項目之間的內(nèi)部網(wǎng)絡是相互隔離的,不能共享。
- 該網(wǎng)絡由Neutron直接配置與管理。
- 路由器:用于將內(nèi)部網(wǎng)絡與外部網(wǎng)絡連接起來,因此,要使虛擬機訪問外部網(wǎng)絡,必須創(chuàng)建一個路由器。
Neutron需要實現(xiàn)的主要是內(nèi)部網(wǎng)絡和路由器。內(nèi)部網(wǎng)絡是對二層(L2)網(wǎng)絡的抽象,模擬物理網(wǎng)絡的二層局域網(wǎng),對于項目來說,它是私有的。路由器則是對三層(L3)網(wǎng)絡的抽象,模擬物理路由器,為用戶提供路由、NAT等服務。
2、網(wǎng)絡子網(wǎng)和端口
- 網(wǎng)絡:一個隔離的二層廣播域,類似交換機中的VLAN。
- Neutron支持多種類型的網(wǎng)絡, 如FLAT、VLAN、VXLAN等。
- 子網(wǎng):一個IPV4或者IPV6的地址段及其相關(guān)配置狀態(tài)。
- 虛擬機實例的IP地址從子網(wǎng)中分配。
- 每個子網(wǎng)需要定義IP地址的范圍和掩碼(這個有點像DHCP中定義的作用域的概念)。
- 端口:連接設備的連接點,類似虛擬交換機上的一個網(wǎng)絡端口。
- 端口定義了MAC地址和IP地址,當虛擬機的虛擬網(wǎng)卡綁定到端口時,端口會將MAC和IP分配給該虛擬網(wǎng)卡。
通常可以創(chuàng)建和配置網(wǎng)絡、子網(wǎng)和端口來為項目搭建虛擬網(wǎng)絡。網(wǎng)絡必須屬于某個項目,一個項目中可以創(chuàng)建多個網(wǎng)絡。一個子網(wǎng)只能屬于某個網(wǎng)絡,一個網(wǎng)絡可以有多個子網(wǎng)。一個端口必須屬于某個子網(wǎng),一個子網(wǎng)可以有多個端口。
3、網(wǎng)絡拓撲類型
- Local
- Local網(wǎng)絡與其他網(wǎng)絡和節(jié)點隔離。
- 該網(wǎng)絡中的虛擬機實例只能與位于同一節(jié)點上同一網(wǎng)絡的虛擬機實例通信,實際意義不大,主要用于測試環(huán)境。
- 位于同一Local網(wǎng)絡的實例之間可以通信,位于不同Local網(wǎng)絡的示例之間無法通信。
- 一個Local網(wǎng)絡只能位于同一個物理節(jié)點上,無法跨節(jié)點部署。
- Flat
- Flat是一種簡單的扁平網(wǎng)絡拓撲,所有的虛擬機實例都連接在同一網(wǎng)絡中,能與位于同一網(wǎng)絡的實例進行通信,并且可以跨多個節(jié)點。
- 這種網(wǎng)絡不使用VLAN,沒有對數(shù)據(jù)包打VLAN標簽,無法進行網(wǎng)絡隔離。
- Flat是基于不使用VLAN的物理網(wǎng)絡實施的虛擬網(wǎng)絡。
- 每個物理網(wǎng)絡最多只能實現(xiàn)一個虛擬網(wǎng)絡。
- VLAN
- VLAN是支持802.1q協(xié)議的虛擬局域網(wǎng),使用VLAN標簽標記數(shù)據(jù)包,實現(xiàn)網(wǎng)絡隔離。
- 同一VLAN網(wǎng)絡中的實例可以通信,不同VLAN網(wǎng)絡中的實例只能通過路由器來通信。
- VLAN網(wǎng)絡可以跨節(jié)點。
- VXLAN
- VXLAN (虛擬擴展局域網(wǎng))可以看作是VLAN的一種擴展,相比于VLAN,它有更大的擴展性和靈活性,是目前支持大規(guī)模多租房網(wǎng)絡環(huán)境的解決方案。
- 由于VLAN包頭部限長是12位, 導致VLAN的數(shù)量限制是4096 (212) 個,不能滿足網(wǎng)絡空間日益增長的需求。
- 目前VXLAN的封包頭部有24位用作VXLAN標識符(VNID)來區(qū)分VXLAN網(wǎng)段,最多可以支持16777216 (224) 個網(wǎng)段。
- VXLAN使用STP防止環(huán)路,導致一半的網(wǎng)絡路徑被阻斷。
- VXLAN的數(shù)據(jù)包是封裝到UDP通過三層傳輸和轉(zhuǎn)發(fā)的,可以完整地利用三層路由,能克服VLAN和物理網(wǎng)絡基礎(chǔ)設施的限制,更好地利用已有的網(wǎng)絡路徑。
- GRE
- GRE (通用路由封裝)是用一種網(wǎng)絡層協(xié)議去封裝另一種網(wǎng)絡層協(xié)議的隧道技術(shù)。
- GRE的隧道由兩端的源IP地址和目的IP地址定義,它允許用戶使用IP封裝IP等協(xié)議,并支持全部的路由協(xié)議。
- 在OpenStack環(huán)境中使用GRE意味著"IP over IP”,GRE與VXLAN的主要區(qū)別在于,它是使用IP包而非UDP進行封裝的。
- GENEVE
- GENEVE(通用網(wǎng)絡虛擬封裝)的目標宣稱是僅定義封裝數(shù)據(jù)格式,盡可能實現(xiàn)數(shù)據(jù)格式的彈性和擴展性。
- GENEVE封裝的包通過標準的網(wǎng)絡設備傳送,即通過單播或多播尋址,包從一個隧道端點傳送到另一個或多個隧道端點。
- GENEVE幀格式由一個封裝在IPV4或IPV6的UDP里的簡化的隧道頭部組成。
- GENEVE推出的主要目的是為了解決封裝時添加的元數(shù)據(jù)信息問題(到底多少位,怎么用GENEVE自動識別與調(diào)整) ,以適應各種虛擬化場景。
小結(jié):
隨著目前互聯(lián)網(wǎng)技術(shù)的發(fā)展,對于網(wǎng)絡部分,使用虛擬化的方案,實現(xiàn)對傳統(tǒng)網(wǎng)絡(承載網(wǎng)絡,Underlay)的擴展,利用疊加網(wǎng)絡(Overlay )的方式,常用的疊加網(wǎng)絡VXLAN、GRE和GENEVE。
Overlay網(wǎng)絡無須對基礎(chǔ)網(wǎng)絡進行大規(guī)模修改,不用關(guān)心這些底層實現(xiàn),是實現(xiàn)云網(wǎng)融合的關(guān)鍵。
4、網(wǎng)絡基本架構(gòu)
- Neutron僅有一個主要服務進程neutron-server。
- 它是運行在控制節(jié)點上的,對外提供Openstack網(wǎng)絡API作為訪問Neutron的入口,收到請求后調(diào)用插件進行處理,最終由計算節(jié)點和網(wǎng)絡節(jié)點上的各種代理完成請求。
- 網(wǎng)絡提供者是指提供OpenStack網(wǎng)絡服務的虛擬或物理網(wǎng)絡設備
- 如Linux Bridge、Open vSwitch
- 或者其他支持Neutron的物理交換機。
- 與其他服務一樣,Neutron的各組件服務之間需要相互協(xié)調(diào)和通信
- neutron-server、插件和代理之間通過消息隊列進行通信和相互調(diào)用。
- 數(shù)據(jù)庫用于存放OpenStack的網(wǎng)絡狀態(tài)信息
- 例如:網(wǎng)絡、子網(wǎng)、端口、路由器等。
- 客戶端是指使用Neutron服務的應用程序,可以是命令行工具、Horizon和Nova計算服務等。
實例:以一個創(chuàng)建VLAN 100虛擬網(wǎng)絡的流程為例說明這些組件如何協(xié)同工作。
- neutron-server收到創(chuàng)建網(wǎng)絡的請求,通過消息隊列通知已注冊的Linux Bridge插件。(插件可以有很多,這里舉例創(chuàng)建虛擬網(wǎng)絡的插件是Linux Bridge插件)
- 該插件將要創(chuàng)建的網(wǎng)絡信息(如名稱、VLAN ID等)保存到數(shù)據(jù)庫中,并通過消息隊列通知運行在各節(jié)點上的代理
- 代理收到消息后會在節(jié)點上的物理網(wǎng)卡上創(chuàng)建VLAN設備(比如eth1.100),并創(chuàng)建一個網(wǎng)橋(比如brqxxx)來橋接VLAN設備。
5、Neutron-server
- RESTful API:直接對客戶端提供API服務,屬于最前端的API,包括Core API和Extension API兩種類型。
- Core API提供管理網(wǎng)絡、子網(wǎng)和端口核心資源的RESTful API;
- Extension API則提供管理路由器、防火墻、負載均衡、安全組等擴展資源的RESTful API。
- Common Service:通用服務,負責對API請求進行檢驗、認證,并授權(quán)。
- Neutron Core:核心處理程序,調(diào)用相應的插件API來處理API請求。
- Plugin API:定義插件的抽象功能集合,提供調(diào)用插件的API接口,包括Core Plugin API 和 Extension Plugin API兩種類型。
- Neutron Core通過Core Plugin API調(diào)用相應的Core Plugin
- Neutron Core通過Extension Plugin API調(diào)用相應的Service Plugin
四、Neutron主要插件、代理和服務
Neutron遵循OpenStack的設計原則,采用開放性架構(gòu),通過插件、代理和網(wǎng)絡提供者的配合來實現(xiàn)各種網(wǎng)絡功能。
- 插件是Neutron的一種API的后端實現(xiàn),目的是增強擴展性。
- 插件按照功能可分為CorePlugin和Service Plugin兩種類型。
- Core Plugin提供基礎(chǔ)二層虛擬機網(wǎng)絡支持,實現(xiàn)網(wǎng)絡、子網(wǎng)和端口核心資源的支持。
- Service plugin是指Core Plugin之外的其他插件,提供路由器、防火墻、安全組、負載均衡等服務支持。
- 直到OpenStack的Havana版本,Neutron才開始提供一個名為L3 RouterService Plugin的插件支持路由服務。
- 插件由Neutron-server 的Core Plugin API和Extension Plugin API調(diào)用
- 用于確定具體的網(wǎng)絡功能,要配什么樣的網(wǎng)絡
- 工作流程:插件處理Neutron-Server發(fā)來的請求
- 主要職責是在數(shù)據(jù)庫中維護Neutron網(wǎng)絡的狀態(tài)信息(更新Neutron數(shù)據(jù)庫),通知相應的代理實現(xiàn)具體的網(wǎng)絡功能。
- 每一個插件支持一組API資源并完成特定操作,這些操作最終由插件通過RPC調(diào)用相應的代理(Agent)來完成。
- 代理處理插件轉(zhuǎn)來的請求,負責在網(wǎng)絡提供者上真正實現(xiàn)各種網(wǎng)絡功能。
- 代理使用物理網(wǎng)絡設備或者虛擬化技術(shù)完成實際的操作任務,如用于路由具體操作L3 Agent。
插件和代理與網(wǎng)絡提供者配套使用,比如網(wǎng)絡提供者是Linux Bridge,就需要使用LinuxBridge的插件和代理,如換成OpenySwitch,則需要改成相應的插件和代理。
1、典型的主機節(jié)點部署
Neutron與其他OpenStack服務組件系統(tǒng)工作,可以部署在多個物理主機節(jié)點上,主要涉及控制節(jié)點、網(wǎng)絡節(jié)點計算節(jié)點,每個節(jié)點可以部署多個,典型的主機節(jié)點部署介紹如下
控制節(jié)點和計算節(jié)點的結(jié)合
控制節(jié)點上部署Neutron-service (API)、Core Plugin和Service Plugin的代理,這些代理包括neutron-plugin-agent、neutron-medadata-agent、neutron-dhcp-agnet、neutron-l3-agent、neutron-lbass-agent等。Core plugin和service plugin已經(jīng)集成到neutron-server中,不需要運行獨立的plugin服務。
計算節(jié)點上可以部署Core Plugin、Linux Bridge或Open vSwitch的代理,負責體提供二層網(wǎng)絡功能。
控制節(jié)點和計算節(jié)點都需要部署Core Plugin的代理,因為控制節(jié)點與計算節(jié)點通過該代理,才能建立二層連接。
控制節(jié)點和網(wǎng)絡節(jié)點的結(jié)合
可以通過增加網(wǎng)絡節(jié)點承擔更大的負載,該方案特別適合規(guī)模較大的OpenStack環(huán)境
控制節(jié)點部署Neutron-server服務,只負責通過Neutron-server響應的API請求。(水平擴展)
網(wǎng)絡節(jié)點部署的服務包括Core Plugin的代理和service Plugin的代理。將所有的代理主鍵從上述控制節(jié)點分離出來,部署到獨立的網(wǎng)絡節(jié)點上,由獨立的網(wǎng)絡節(jié)點實現(xiàn)數(shù)據(jù)的交換,路由以及負責均衡等高級網(wǎng)絡服務。
2、ML2插件
之前使用Neutron項目時,開發(fā)人員發(fā)現(xiàn)了兩個突出的問題:
- 第一個問題:多種網(wǎng)絡提供者無法共存
- 一個Neutron網(wǎng)絡只能由一個插件管理
- Core Plugin負責管理和維護Neutron二層的虛擬網(wǎng)絡的狀態(tài)信息,Core Plugin插件與相應的代理是一一對應的
- Linux Bridge插件,只能選擇Linux Bridge代理,必須在OpenStack的所有節(jié)點上使用Linux Bridge作為虛擬交換機。
- 第二個問題:開發(fā)插件的工作量太大
- 所有傳統(tǒng)的CorePlugin之間存在大量重復的代碼(如數(shù)據(jù)庫訪問代碼)
而從OpenStack的Havana 版本開始,Neutron 中出現(xiàn)一個插件ML2(Moduler Layer2),ML2的出現(xiàn)取代了所有Core Plugin,允許在OpenStacks網(wǎng)絡中同時使用多種二層的網(wǎng)絡技術(shù),不同的節(jié)點可以使用不同的網(wǎng)絡實現(xiàn)機制,ML2能夠與現(xiàn)在所有的代理無縫集成,以前使用費的代理無需變更,只要將傳統(tǒng)的Core Plugin替換ML2。ML2使openstack對先的網(wǎng)絡技術(shù)的支持更加簡單,無需從頭開發(fā)Core Plugin,只需開發(fā)相應的機制驅(qū)動,大大減少編寫的代碼。
ML2插件架構(gòu)詳解
ML2對二層的網(wǎng)絡進行抽象,解鎖了Neutron所支持的網(wǎng)絡類型(Type)與訪問這些網(wǎng)絡類型的虛擬網(wǎng)絡實現(xiàn)機制(Mechansim),并通過驅(qū)動的形式進行擴展,不同的網(wǎng)絡類型對應不同的類型的驅(qū)動(Type Driver),由類型管理器(Type Manager)進行管理,不同的網(wǎng)絡實現(xiàn)機制對應不同的機制驅(qū)動(Mechasiom Driver),由機制管理器(Mechasim Manager)進行管理。這種ML2實現(xiàn)框架具有彈性,易于擴展,能夠能活支持多種網(wǎng)絡類型和實現(xiàn)機制
類型驅(qū)動(Type Driver)
Neutron支持的每一種網(wǎng)絡類型都有一個對應的ML2類型驅(qū)動,類型驅(qū)動負責維護網(wǎng)絡類型的狀態(tài),執(zhí)行驗證、創(chuàng)建網(wǎng)絡等工作。目前Neutron已經(jīng)實現(xiàn)的網(wǎng)絡類型包括Flat、Local、Vlan、Vxlan、Gre
機制驅(qū)動(Mechansim Driver)
Neutron支持的每一種網(wǎng)絡機制都有一個對應的ML2機制驅(qū)動
機制驅(qū)動負責獲取類型驅(qū)動維護的網(wǎng)絡狀態(tài),確保在相應的網(wǎng)絡設備(物理或者虛擬的)上正確實現(xiàn)這些狀態(tài)
類型驅(qū)動vlan,機制驅(qū)動為Linux Bridge,如果創(chuàng)建vlan10,那么vlan的類型驅(qū)動會確保將vlan10的信息保存到Neutron數(shù)據(jù)庫中,包括網(wǎng)絡的名稱、vlan ID等,而Linux bridge機制驅(qū)動會確保各個節(jié)點上Linux Bridge代理在物理網(wǎng)卡上創(chuàng)建ID為10的vlan設備和bridge設備,并且將二者進行橋接
Neutron的網(wǎng)絡機制有3種類型
基于代理(Agent-based):包括Linux bridge、Openvswitch
基于控制器(controller-based):包括OpenStacDaylight、VMware NSX等
基于物理交換:Cisco Nexus、Arista、Mellanox等
擴展資源
ML2作為一個Core Plugin,在實現(xiàn)網(wǎng)絡、子網(wǎng)和端口核心資源的同事,也實現(xiàn)了包括端口綁定(port Bindings)、安全組(Security Group)等部分擴展資源
3、Linux Bridge代理
- Linux Bridge是成熟可靠的Neutron二層網(wǎng)絡虛擬化技術(shù),支持Local、Flat、vlan、Vxlan這四種網(wǎng)絡類型
- Linux Bridge可以將一臺主機上的多個網(wǎng)卡橋接起來,充當一臺交換機,它可以橋接物理網(wǎng)卡,又可以是虛擬網(wǎng)卡。
- 用于橋接虛擬網(wǎng)卡(虛擬機網(wǎng)卡)的是Tap接口,這是一個虛擬機出來的網(wǎng)絡設備,稱為Tap設備,作為網(wǎng)橋的一個端口。
- tap接口在邏輯上與物理接口具有相同的功能,可以接收和發(fā)送數(shù)據(jù)包
- 若選擇Linux Bridge代理,在計算節(jié)點上數(shù)據(jù)包從虛擬機發(fā)送到物理網(wǎng)卡需要經(jīng)過以下設備
- Tap接口(Tap interface):用于網(wǎng)橋虛擬機的網(wǎng)卡,命令為tap XXX
- Linux網(wǎng)橋(Linux bridge):作為二層交換機,命令為brq XXXX
- VLAN 接口(Vlan interface):在vlan網(wǎng)絡中用于連接網(wǎng)橋,命名為ethx.y(ethx為物理網(wǎng)卡名稱,y為vlan ID)
- VXLAN接口(VXLAN interface):在vxlan網(wǎng)絡中用于連接網(wǎng)橋,命名為vxlan-z(z是vlan ID)
- 物理網(wǎng)絡接口:用于連接到物理網(wǎng)絡
4、Open vSwitch代理
與Linux Bridge相比,Open vSwitch(簡稱OVS)具有幾種管控功能,而且性能更加優(yōu)化,支持更多的功能,目前在Openstack領(lǐng)域為主流。
- OVS代理支持Local、flat、vlan、vxlan、GRE和GENEVE等網(wǎng)絡類型
- OVS的設備類型
- Tap設備:用于網(wǎng)橋連接虛擬機網(wǎng)卡
- Linux網(wǎng)橋:橋接網(wǎng)絡接口(包括虛擬接口)
- VETH對(VETH Pair):直接相連的一對虛擬機網(wǎng)絡接口
- 兩個虛擬機網(wǎng)絡接口一個接受一個發(fā)送
- 用來連接兩個虛擬網(wǎng)橋
- OVS網(wǎng)橋:OVS的核心設備,包括一個OVS集成網(wǎng)橋和一個OVS物理連接網(wǎng)橋。
- 兩個OVS網(wǎng)橋一般通過VETH來對接
數(shù)據(jù)包流程(在計算節(jié)點上的數(shù)據(jù)包從虛擬機發(fā)送到物理網(wǎng)卡)
- Tap接口:用于網(wǎng)橋虛擬機的網(wǎng)卡,命名為tapxxx
- Linu網(wǎng)橋:與LInux bridge不同,命名為qbrxxx(其中編號xxx與tapxxx中相同)
- VETH對:兩端分別命名為qvbxxx和qvoxxx(其中編號xxx與tapxxx中相同)
- OVS集成網(wǎng)橋:命名為br-int
- OVS PATCH端口:兩端分別命名為int-br-ethx和phy-br-ethx(x為物理網(wǎng)卡名稱的編號)
- 特殊端口類型,只能在Open vSwitch中使用
- OVS物理連接網(wǎng)橋:分為兩種類型
- 在flat和vlan網(wǎng)絡中使用OVS提供者網(wǎng)橋(provider bridge),命名為br-ethx(x為物理網(wǎng)卡名稱的編號)
- 在vxlan、GRE和GENEVE疊加網(wǎng)絡中使用OVS隧道網(wǎng)橋(Tunnel Bridge),命名為Br-tun
- 另外在local網(wǎng)絡中不需要在OVS物理連接網(wǎng)橋
- OVS PATCH端口:兩端分別命名為int-br-ethx和phy-br-ethx(x為物理網(wǎng)卡名稱的編號)
- 物理網(wǎng)路接口:用于連接到物理網(wǎng)絡,命名為ethx(x 為物理網(wǎng)卡的名稱中的編號)
OVS網(wǎng)絡的邏輯結(jié)構(gòu)
所有的虛擬機都連接到同一個網(wǎng)橋br-int,Open VSwitch通過配置br-int和br-ethx上流規(guī)則(flow rule)來進行vlan轉(zhuǎn)換,進而實現(xiàn)vlan之間的隔離
例如:內(nèi)部標簽分別為1和2,而物理網(wǎng)絡的vlan標簽是101和102,當br-eth1網(wǎng)橋上的phy-br-eth1端口收到一個vlan1標記的數(shù)據(jù)包時,會將其中的vlan1轉(zhuǎn)讓為vlan101;當br-init網(wǎng)橋上的init-br-eth1端口收到一個vlan101標記的數(shù)據(jù)包時,會將其中的vlan101轉(zhuǎn)讓為vlan1
5、DHCP代理
openstack實例在啟動過程中能夠從Neutron提供的DHCP服務自動獲取IP地址
- DHCP主要組件
- DHCP代理(neutron-dhcp-agent):為項目網(wǎng)絡提供DHCP功能,提供元數(shù)據(jù)請求(Metadata request)服務
- DHCP驅(qū)動:用于管理DHCP服務器,默認為DNSmasq,這是有一個提供DHCP和DNS服務的開源軟件,提供DNS緩存和DHCP服務功能
- DHCP代理調(diào)度器(Agent-Scheduler):負責DHCP代理與網(wǎng)絡(network)的調(diào)度
DHCP代理的主要任務
- ①定期報告DHCP代理的網(wǎng)絡狀態(tài)
- 通過RPC報告給Neutron-server,然后通過Core Plugin報告給數(shù)據(jù)庫并進行更新網(wǎng)絡狀態(tài)。
- ②啟動dnsmasg進程
- 檢測qdhcp-xxx名稱空間( Namespace)中的ns-xxx端口接收到DHCP DISCOVER請求
DHCP代理的配置文件
DHCP代理配置文件是/etc/neutron/dhcp_agent.ini
- interface_ driver:用來創(chuàng)建TAP設備的接口驅(qū)動
- 如果使用Linux Bridge連接,該值設為neutron.agent.Linux.interface.BridgelnterfaceDriver
- 如果選擇Open Vswitch,該值為neutron.agnt.linux.interface.OVSInterfaceDriver
- dhcp_ driver:指定DHCP啟動
- 默認值為neutron.agent.linux.dhcp.Dnsmasq表示dnsmasq進程來實現(xiàn)DHCP服務
DHCP代理的工作機制
①創(chuàng)建實例時,Neutron 隨機生成MAC并從配置數(shù)據(jù)中分配一個固定的 IP地址,一起保存到dnsmasg的hosts文件中,讓dnsmasq進程做好準備。
②與此同時,Nova-compute 會設置Mac地址。
③實例啟動,發(fā)出DHCP DISCOVER廣播,該廣播消息在整個網(wǎng)絡中都可以被收到。
④廣播消息到達dnsmasq監(jiān)聽Tap接口。dnsmasg收到后檢查hosts文件,發(fā)現(xiàn)有對應項,它以DHCP OFFER消息將IP和網(wǎng)關(guān)IP發(fā)回到虛擬機實例。
⑤虛擬機實例發(fā)回DHCP REQUEST消息確認接收DHCP OFFER
⑥dnsmasq.發(fā)回確認消息DHCPACK,整個過程結(jié)束。
6、Linux網(wǎng)絡名稱空間(租戶)
在介紹DHCP服務時提到的linux網(wǎng)絡名稱空間( Network Namespace簡稱netns )是linux提供的一種內(nèi)核級別的網(wǎng)絡環(huán)境隔離方法,Namespace也可以翻譯稱為命名空間或者叫名字空間。當前l(fā)inux支持6種不同類型的名稱空間,網(wǎng)絡名稱空間是其中一種,在二層網(wǎng)絡上,VLAN可以將一個物理交換機分割幾個獨立的虛擬交換機。類似地,在三層網(wǎng)絡上,Linux 網(wǎng)絡名稱空間可以將一個物理三層網(wǎng)絡跟個成幾個獨立的虛擬三層網(wǎng)絡。
Linux網(wǎng)絡名稱空間概述
在Linux中,網(wǎng)絡空間可以被認為是隔離的擁有單獨網(wǎng)絡棧(網(wǎng)絡接口、路由、iptables等)的環(huán)境,它經(jīng)常來隔離網(wǎng)絡資源(設備和服務),只有擁有同樣網(wǎng)絡名稱空間的設備才能批次訪問。它還能提供了在玩過名稱空間內(nèi)運行進程的功能,后臺進程可以運行不同名稱空間內(nèi)的相同端口上,用戶還可以虛擬出一塊網(wǎng)卡。
可以創(chuàng)建一個完全獨立的全新網(wǎng)絡環(huán)境,包括獨立的網(wǎng)絡接口、路由表、ARP 表,IP地址表、iptables 或ebtables等,與網(wǎng)絡有關(guān)的組件都是獨立的。
通常情況下可以使用ip netns add命令添加新的網(wǎng)絡名稱空間,使用ip netns list命令查看所有的網(wǎng)絡名稱空間。
執(zhí)行以下命令進入指定的網(wǎng)絡名稱空間
可以在指定的虛擬環(huán)境中運行任何命令,如下
ip netns exec net001 bash為虛擬網(wǎng)路環(huán)境netns0的Eth0接口增加P地址,如下
ip netns exec netns0 ip address add 10.0.1.1/24 eth0網(wǎng)絡名稱空間內(nèi)部通信沒有問題,但是被隔離的網(wǎng)絡名稱空間之間要進行通信,就必須采用特定方法,即VETH對,VETH對是一種成對出現(xiàn)的網(wǎng)絡設備,他們像一根虛擬的網(wǎng)絡線,可用于連接兩個名稱空間,向VETH對一端輸入的數(shù)據(jù)將自動轉(zhuǎn)發(fā)到另外一端。
例如創(chuàng)建兩個網(wǎng)絡名稱空間的netns1和netns2并使他們之間通信,可以執(zhí)行以下步驟
①創(chuàng)建兩個網(wǎng)絡名稱空間
②創(chuàng)建一個VETH對(創(chuàng)建的一-對VETH虛擬接口類似管道(pipe) ,發(fā)給veth1的數(shù)據(jù)包可以在veth2收到,發(fā)給veth2的數(shù)據(jù)包可以在veth1收到,相當于安裝兩個接[ 1并用網(wǎng)線連接起來)
ip link add veth1 type veth peer name veth2③將上述兩個VETH對虛擬接口分別放置到兩個網(wǎng)絡名稱空間中
ip link set veth1 netns netns1 ip link set veth2 netns netns2Linux網(wǎng)絡名稱空間實現(xiàn)DHCP服務隔離
Neutron通過網(wǎng)絡名稱空間為每個網(wǎng)絡提供獨立的DHCP和路由服務,從而允許項目創(chuàng)建重疊的網(wǎng)絡,如果沒有這種隔離機制,網(wǎng)絡就不能重疊,這樣就失去了很多靈活性
每個dnsmasq.進程都位于獨立的網(wǎng)絡名稱空間,命名為qdhcpxx
以創(chuàng)建flat網(wǎng)絡為例
- Neutron自動新建該網(wǎng)絡對應的網(wǎng)橋brqfxxx,以及DHCP的Tap設備tapxxx。
- 物理主機本身也有一個網(wǎng)絡名稱空間,稱為root,新創(chuàng)建的名稱空間默認只擁有一個回環(huán)設備(LoopbackDevice)。
- 如果DHCP的Tap虛擬接口放置到gdhcp-xxx名稱空間,該Tap虛擬接口將無法直接與root名稱空間中網(wǎng)橋設備brqxxx連接。
- 為此,Neutron使用VETH對來解決這個問題,添加VETH對taxxx與ns-xxx i讓gdhce xxx連接到brxxx.
Linux網(wǎng)絡名稱空間實現(xiàn)路由器
Neutron允許在不同的網(wǎng)絡中的子網(wǎng)的CIDR和IP地址重疊,具有相同的IP地址的2個虛擬機也不會產(chǎn)生沖突,這是由于Neutron的路由器通過Linux網(wǎng)絡名稱空間實現(xiàn)的,每個路由器有自己的獨立的路由表
7、Neutron路由器
Neutron路由器是-一個三層的(L3)的抽象,其模擬物理路由器,為用戶提供路由、NAT等服務,在OpenStack網(wǎng)絡中,不用子網(wǎng)之間的通信需要路由器,項目網(wǎng)絡與外部網(wǎng)絡之間的通信更需要路由器。
Neutron提供虛擬路由器,也支持物理路由器。例如,兩個隔離的VLAN網(wǎng)絡之間需要實現(xiàn)通信,可以通過物理路由器實現(xiàn),由物理路由器提供相應的IP路由表,確保兩個IP子網(wǎng)之間的通信,將兩個VLAN網(wǎng)絡中的虛擬機默認網(wǎng)關(guān)分別設置為路由路由器的接口A和B的IP地址。VLANA中的虛擬機要與VLAN B中的虛擬機通信時,數(shù)據(jù)包將通過VLAN A中的物理網(wǎng)卡到達路由器,由物理路由器轉(zhuǎn)發(fā)到VLAN B中的物理網(wǎng)卡,再到達目的虛擬機。
Neutron的虛擬路由器使用軟件模擬物理路由器,路由實現(xiàn)機制組網(wǎng)。Neutron的路由服務由L3代理提供
8、L3代理
在Neutron中L3代理(neutron-l3agent)具有相當重要的地位。它不僅提供虛擬機路由器,而且通過iptables提供地址轉(zhuǎn)換(SNAT、DNAT)、浮動地址( Floating IP)和安全組(security group)功能,L3代理利用LInux IP棧、路由和iptables.來實現(xiàn)內(nèi)部網(wǎng)絡中不同網(wǎng)絡的虛擬機實例之間的通信,以及虛擬機實例和外部網(wǎng)絡之間的網(wǎng)絡流量路由和轉(zhuǎn)發(fā),L3代理可以部署在控制節(jié)點或者網(wǎng)絡節(jié)點上
(1)路由(routing)
L3代理提供的虛擬路由器通過虛擬接口連接到子網(wǎng),一個子網(wǎng)對應一個接口,該接口的地址是該子網(wǎng)的網(wǎng)關(guān)地址。
L3代理會將每個路由器創(chuàng)建一個網(wǎng)絡名稱空間,通過VETH對于TAP相連,然后將網(wǎng)關(guān)IP配置在位于名稱空間的VETH接口上,這樣就能夠提供路由。
網(wǎng)絡節(jié)點如果不支持linux名稱空間,則只能運行一個虛擬路由器
(2)通過網(wǎng)絡名稱空間支持網(wǎng)絡重疊
在云環(huán)境下用戶可以按照自己的規(guī)劃創(chuàng)建網(wǎng)絡,不同的項目( 租戶)的網(wǎng)絡IP地址可能會重疊,為實現(xiàn)此功能,L3 代理使用linux網(wǎng)絡名稱空間來提供隔離的轉(zhuǎn)發(fā)上下文,隔離不同的項目(租戶)的網(wǎng)絡,每個L3代理運行在一個名稱空間中,每個名稱空間由quouter-命名
(3)源地址轉(zhuǎn)換(SNAT)
L3代理通過在iptables表中增加POSTROUTING鏈來實現(xiàn)源地址轉(zhuǎn)換,既內(nèi)網(wǎng)計算機訪問外網(wǎng)時,發(fā)起訪問的內(nèi)網(wǎng)IP地址(源IP地址)轉(zhuǎn)換為外網(wǎng)網(wǎng)關(guān)的IP地址。這種功能讓虛擬機實例能夠直接訪問外網(wǎng)。不過外網(wǎng)計算機還不能直接訪問虛擬機實例,因為實例沒有外網(wǎng)IP地址,而H的地址轉(zhuǎn)化就能解決這一問題。
(4)目的地址轉(zhuǎn)換(DNAT)
Neutron需要設置浮動IP地址支持從外網(wǎng)訪問項目(租戶)網(wǎng)絡中的實例。
每個浮動IP唯一對應一個路由器,浮動IP–>關(guān)聯(lián)的端口–>所在的子網(wǎng)–>包含該子網(wǎng)及外部子網(wǎng)路由器。創(chuàng)建浮動IP時,在Neutron分配IP地址后,通過RPC通知該浮動IP地址對應的路由器去設置該浮動IP對應的iptabels規(guī)則,從外網(wǎng)訪問虛擬機實例時,目的IP地址為實例的浮動IP地址,因此必須由lptables將其轉(zhuǎn)化成固定的IP地址,然后在將其路由到實例。
浮動IP地址是提供靜態(tài)NAT功能,建立外網(wǎng)IP地址與實例所在的項目(租戶網(wǎng)絡) IP地址的一對一映射,浮動IP地址配置在路由器提供網(wǎng)關(guān)的外網(wǎng)接口上。
(5)安全組(Security Group)
安全組定義了那些進入的網(wǎng)絡流量能被轉(zhuǎn)發(fā)給虛擬機實例。安全組包含一些防火墻策略,稱為安全組規(guī)則( Security Group nule) ,可以定義若干個安全組。每個安全組可以有若千調(diào)規(guī)則。可以給每個實例綁定若千個安全組
安全組的原理是通過iptables對是咧所在的計算機節(jié)點的網(wǎng)絡流量進行過濾。安全組規(guī)則作用在實例的端口上,具體是在連接實例的計算節(jié)點上的linux網(wǎng)橋上實施。
9、FWaas(虛擬防火墻)
Fwaas(firewall-as-a-service)是一種基于Neutron L3 Agent的虛擬防火墻,是Neutron的一個高級服務。通過它,OpenStack 可以將防火墻應用到項目(租戶)、路由器、路由器端口和虛擬機端口,在子網(wǎng)邊界上對三層和四層的流量進行過濾。
傳統(tǒng)的網(wǎng)絡中的防火墻一般在網(wǎng)關(guān)上,用來控制子網(wǎng)之間的訪問。FWaas的原理也是一樣,在Neutron路由上應用防火墻規(guī)則,控制進出項目(租戶)網(wǎng)絡的數(shù)據(jù)。防火墻必須關(guān)聯(lián)某個策略(Policy) 。
FWaas 的應用對象是慮報路由器,可以在安全組之前控制從外部傳入的流量,但是對于同一個子網(wǎng)內(nèi)的流量不做限制,安全組保護的是實例,而FWaas保護的是子網(wǎng),兩者互為補允,通常部客FWaas和安全組來實現(xiàn)雙重防護。
補充:
策略是規(guī)則(rule) 的集合,防火墻會按順序因公策略中的每一條規(guī)則。規(guī)則是訪問控制的規(guī)則,由源于日的子網(wǎng)IP、源于日的端口、協(xié)議、允許Allow)和拒絕(Deny)動作組成
安全組是最早的網(wǎng)絡安全模塊,其應用對象是虛擬網(wǎng)卡,在計算機節(jié)點上通過iptables.規(guī)則控制進出實例慮積網(wǎng)卡的流量。
FW版本(FWaasV1與FWaasV2)
- FWaaSv1是傳統(tǒng)方后墻方案,對路由器提供保護,將防火墻應用到路由器時,該路由器的所有內(nèi)部端口受到保護,其中虛擬機2進出的數(shù)據(jù)流都會得到防火墻保護。
- FWaaSv2提供了更具細粒度的安全服務,FWaaSv2防火墻的概念防火墻組(firewallgroup)代替,一個防火城包括兩項策略:入口策略(ingress polie)和出口(egress poliy)。
- 防火墻組不在用于路由器級(路由器全部端口),而是路由器端口。
- 注意,FWaas v2的配置僅提供命令行工具,不支持dashboard圖形頁面。
五、Neutron網(wǎng)絡配置和管理
虛擬網(wǎng)絡類型:提供者網(wǎng)絡和自服務網(wǎng)絡
1、提供者網(wǎng)絡
- 提供者網(wǎng)絡選項以最簡單的方式部署OpenStack網(wǎng)絡服務,包括二層服務(橋/交換機)服務、VLAN網(wǎng)絡分段。
- 本質(zhì)上,它建立虛擬網(wǎng)絡到物理網(wǎng)絡的橋,依靠物理網(wǎng)絡基礎(chǔ)設施提供三層服務(路由)。
- 提供者網(wǎng)絡默認有管理員創(chuàng)建,實際上,就是與物理網(wǎng)絡有直接映射關(guān)系的虛擬網(wǎng)絡,要使用物理網(wǎng)絡直接連接虛擬機實例,必須在openstack中將物理網(wǎng)絡定義為提供者網(wǎng)絡。
- 這種網(wǎng)絡可以在多個項目之間共享。
- 雖然可以創(chuàng)建VXLAN或GRE類型的提供者網(wǎng)絡,但是只有Flat或VLAN類型的網(wǎng)絡拓撲才對提供者網(wǎng)絡具有實際意義。
- 提供者網(wǎng)絡和物理網(wǎng)絡的某個網(wǎng)段直接映射,因此需要預先在物理網(wǎng)絡中做好相應的配置。物理網(wǎng)絡的每個網(wǎng)段最多只能實現(xiàn)一個提供者網(wǎng)絡.
2、自服務網(wǎng)絡
- 自服務網(wǎng)絡主要目的:讓非特權(quán)的普通項目自行管理網(wǎng)絡,無需管理員介入。
- 這種網(wǎng)絡完全是虛擬的。需要通過虛擬焰由器與提供者網(wǎng)絡和像Internet這樣的外部網(wǎng)絡通信。自服務網(wǎng)絡也對實例提供DHCP服務和元數(shù)據(jù)服務。
- 絕大多數(shù)情況下,自服務網(wǎng)絡使用像VXLAN或GRE這樣的Overlay協(xié)議,因此這些協(xié)議要比使用VLAN標記的二層網(wǎng)終分段支持更多的網(wǎng)絡,而且VLAN通常還要求物理網(wǎng)絡設施的額外配置
- IPV4自服務網(wǎng)絡通過虛擬路由器上的源NAT與提供者網(wǎng)絡進行交互進行通信(內(nèi)部),浮動IP地址則通過虛擬路由器上的目的NAT讓來自提供者網(wǎng)絡的用戶訪問虛擬機實例(外部)。
- 網(wǎng)絡服務使用L3代理實現(xiàn)路由器,L3代理至少要部署在一個網(wǎng)絡節(jié)點上。自服務網(wǎng)絡必須有一個L3代理。不過,一個L3代理或網(wǎng)絡節(jié)點的過載或故障就能影響一大批自服務網(wǎng)絡和使用它們的實例。實際部署痍要提供高可用功能來增加冗余,提高自服務網(wǎng)絡的性能。
- 用戶可以為項目中的連創(chuàng)建項目網(wǎng)絡,也就是自服務網(wǎng)絡。默認情況下自服務網(wǎng)絡被完全隔離,OpenStack網(wǎng)絡支持的網(wǎng)絡隔離和覆蓋技術(shù)包括Flat、VLAN、GRE和VLAN等。
- 一個典型自服務網(wǎng)絡包括三層路由服務、DHCP服務、不能提供LBaas和FWaas這樣高級服務。
- 雖然自服務網(wǎng)絡可以選擇Local、Flat、VLAN、VXLAN或GRE等類型,但是Flat和VLAN類型的自服務網(wǎng)絡本質(zhì)上對應于一個實際的物理網(wǎng)段,因此真正有意義的是VXLAN或GRE類型,因為這類Overlay網(wǎng)絡本身不依賴于具體的物理網(wǎng)絡,只要物理網(wǎng)絡能夠提供IP多播支持即可。
- 這種虛擬網(wǎng)絡中包括自服務網(wǎng)絡(作為內(nèi)部網(wǎng)絡)和提供者網(wǎng)絡(作為外部網(wǎng)絡),也可以使用
這兩種網(wǎng)絡為虛擬機實例提供網(wǎng)絡連接。
總結(jié)
以上是生活随笔為你收集整理的OpenStack之Neutron理论部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32倒计时秒表proteus_单片
- 下一篇: 微信公众号,订阅号,小程序资料整理