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