openstack的網絡服務組件爲neutron,它的設計目標是實現「網絡即服務」。
設計上:遵循基於「軟件定義網絡(SDN)"的靈活和自動化原則
實現上:充分利用linux中各類網絡相關的技術linux
Neutron最爲核心的工做是對二層物理網絡的抽象與管理,物理服務器虛擬化後,虛擬機的網絡功能由虛擬機網卡(vnic)提供,物理交換機也被虛擬化爲虛擬交換機(vswitch),各個vnic鏈接再vswitch的端口上,最後這些vswitch經過物理服務器的物理網卡訪問外部的物理網絡。後端
網絡虛擬化主要由分爲三個部分:
網卡虛擬化:TAP,TUN,VETH
交換機虛擬化:linux bridge,open vswitch
網絡隔離:network-namespaceapi
TAP設備:模擬一個二層的網絡設備,能夠接收和發送二層網絡數據包
TUN設備:模擬一個三層的網絡設備,能夠接收和發送三層網絡數據包
VETH:虛擬ethernet接口,一般以pair的方式出現,一端發出的網絡數據包會被另外一端接收,能夠造成兩個網橋之間的通道安全
TAP/TUN提供了一臺主機內用戶空間的數據傳輸機制,它虛擬機了一套網絡接口,這套接口和物理的接口無任何區別,能夠配置IP,能夠路由流量,不一樣的是它流量只在主機內流通服務器
veth-pari,是成對出現的網絡設備,一端鏈接協議棧,一端鏈接彼此,數據從一端出,一端進。它的特性經常用來鏈接不一樣的虛擬網絡組件,構建大規模的虛擬網絡拓撲,好比鏈接linux bridge,ovs等,用於neutron,能夠構建很是複雜的網絡形態。網絡
linux brigde:工做於二層的網絡設備,功能相似物理交換機
brigde能夠綁定linux上其餘網絡設備,並將這些設備虛擬化爲端口
當一個網絡設備被綁定到bridge上,就至關於物理交換機端口插入了一條鏈接終端的網線。
使用brctl命令配置linux brige架構
相比linux bridge的小規模的主機內部通訊場景,open vswitch更適合大規模的多主機通訊場景負載均衡
network namespace能建立多個隔離的網絡空間,他們有獨立的網絡配置信息,例如網絡設備,路由表,iptables等。
不一樣的網絡空間中的虛擬機運行的時候彷彿就在本身的獨立網絡中。ide
network namespace一般於vrf(virtual routing fowarding虛擬路由轉發)一塊兒工做,vrf是一種ip技術,容許路由表的多個實例同時在同一個路由器上共存。
使用veth能夠鏈接兩個不一樣的網絡命名空間,使用bridge能夠鏈接多個不一樣的網絡命名空間。學習
做爲一種虛擬網絡服務,爲openstack計算提供網絡連通和尋址服務。
neutron對網絡進行了抽象,以下所示:
neutron支持多種類型的Network,包括local,flat,vlan,vxlan和gre
就是子網,每一個子網在neutron中須要定義ip地址和範圍
subnet必須與network關聯,能夠附加dns,網關ip,靜態路由
端口
邏輯網絡交換機上的虛擬交換端口
虛擬機經過port附着到network上
port能夠分配ip地址和mac地址
鏈接租戶內同一個network或者不一樣network之間的子網,以及鏈接內外網
固定ip,分配到每一個端口上的ip,相似於物理環境中配置到網卡上的ip
floating ip(浮動ip)是external network建立的一種特殊的port,能夠將floating ip綁定到任意network中的port上,底層會進行nat轉發,將發送的浮動ip流量轉發到該port上的對應固定ip上,外界能夠經過浮動ip訪問虛擬機,虛擬機也能夠經過浮動ip訪問外界
pytsical network,物理網絡。
在物理網絡環境中鏈接到openstack不一樣節點的網絡,每一個物理網絡能夠支持neutron中的一個或者多個虛擬網絡。
openstack必須經過physical network才能和真實物理網絡通訊
由openstack管理員建立,直接對應數據中心現有物理網絡的一個網段
providr network一般使用vlan或者flat模式,能夠在多個租戶之間共享
自助服務網絡,也叫租戶網絡或項目網絡,它是由openstack租戶建立的,徹底虛擬的,只在本網絡內部連通,不能在租戶之間共享
self-servcie network一般使用vxlan或者gre模式,能夠經過virtual router的snat與provider network通訊
不一樣的self-service network中的網段能夠相同,相似於物理環境中不一樣公司的內部網絡
self-service network若是須要和外部網絡通訊,須要經過router,相似於物理環境中公司上網須要經過路由器或者防火牆。
外部網絡,也叫公共網絡
它是一種特殊的provider network,鏈接的物理網絡與數據中心或者internet相通,網絡中的port能夠訪問外網
通常將租戶的virtual router鏈接到該網絡,並建立floating ip綁定虛擬機,實現虛擬機與外網通訊
Exernal netwok相似於物理環境中直接使用公網ip網段,不一樣的是,openstack中external network對應的物理網絡不必定能直連internet,有可能只是數據中心的一個內部私有網絡。
安全組,他的做用是在neutron port上的一組策略,規定了虛擬機入口和出口流量的規則
安全組基於linux iptables實現,默認拒絕全部流量,只有添加了放行規則的流量才容許經過
每一個openstack項目中都有一個default默認安全組,默認包含以下規則-拒絕全部入口流量,容許全部出口流量
架構圖
neutron架構原則
message queue:neutron-sever經過消息列隊與其餘的neutron agents進行交換消息,可是這個消息列隊不會用於neutron-server與其餘openstack組件(如nova)進行交換消息
l2 agent:負責鏈接端口(ports)和設備,使他們處於共享的廣播域,一般運行在hypervisor上
l3 agent:負責鏈接tenant網絡到數據中心,或者鏈接到internet.在真實的部署環境中,通常都須要多個l3 agent同時運行。
dhcp agent:用於自動配置虛擬機網絡
advance service:提供lb(負載均衡),防火牆等服務
neutron的架構是基於插件的,不一樣的插件提供不一樣的網絡服務,主要包含以下組件
neutron server=apis+plugins,經過這種方式,能夠自由對接不一樣網絡後端能力
core plugin,主要是指ml2(modular layer 2) plugin,是一個開放架構,在plugin下,能夠集成各個廠家,各類後端技術支持的layer 2網絡服務。
ml2 plugin的drivers主要分爲如下兩種:
typer driver:定義了網絡類型,每種網絡類型對應一個type driver
mechanism driver:對接各類二層網絡技術和物理交換機設備,如ovs,linux bridge等,從typer driver獲取相關的底層網絡信息,確保對應的底層技術可以根據這些信息正確配置二層網絡。
serivce plugin用於實現高階網絡服務,如路由,負載均衡,防火牆和***服務等
l3 service plugin主要提供路由,浮動ip服務等。
neutron agent向虛擬機提供二層和三層的網絡鏈接,完成虛擬網絡和物理網絡之間的轉換,提供擴展服務等
neutron支持多種網絡技術和類型,能夠自由組合各類網絡模型。
生產中,openstack主要使用以下兩種網絡模型
flat網絡相似於使用網線直接鏈接物理網絡,openstack不負責網絡隔離
interface 2不帶vlan tag
interface 2須要多個vlan,鏈接的物理交換機通常配置trunk模式,並容許這些vlan經過
使用linux bridge+vlan實現 provider network,網絡流量能夠分爲以下幾種:
南北向流量:虛擬機和外部網絡通訊的流量
東西向流量:虛擬機之間的流量
provider network和外部網絡之間的流量,由物理網絡設備負責交換和路由
如下涉及計算節點1:
如下涉及物理網絡設備
計算節點1:
物理設備
計算節點2
計算節點1
物理設備
如下涉及計算節點1
vxlan是虛擬可擴展的局域網,是一種oeverlay技術,經過三層網絡來搭建虛擬的二層網絡。
虛擬機運行在計算節點1上,使用self-service network 1,將數據包發送給internet上的主機
計算節點1
網絡節點
(直接放圖吧。。。。。)
頭大。。頭大。。網絡看來真的是要學一生的