openstack-neutron基本的網路型別以及分析
【概述】
Neutron是OpenStack中負責提供網路服務的元件,基於軟體定義網路的思想,實現了網路虛擬化下的資源管理,即:網路即服務。
【功能】
·二層交換
Neutron支援多種虛擬交換機,一般使用Linux Bridge和Open vSwitch建立傳統的VLAN網路,以及基於隧道技術的Overlay網路,如VxLAN和GRE(Linux Bridge只支援VxLAN)。
·三層路由
Neutron從J版本開始,正式加入了DVR(Distributed Virtual Router)服務,將原本集中在網路節點上的部分服務分散到了計算節點上。
通過namespace中使用ip route或者iptables實現路由或者NAT,也可以通過openflow給OVS下發流表來實現。
·負載均衡
關於LBaaS的相關內容,可以參照:https://www.cnblogs.com/liuxia912/p/11209968.html
·防火牆
Neutron有兩種方式來保證網路的安全性,分別為防火牆和安全組,均使用iptables實現,前者限制路由器的報文,後者限制進出虛機的報文。
【架構】
·neutron Server
守護程序和一些外掛,可以安裝在網路節點,也可以安裝在控制節點。
neutron-server提供API介面,並把API的呼叫請求傳給已經配置好的外掛進行後續處理。
·neutron L2 agent
為虛擬機器提供2層交換服務,傳輸以MAC地址為基礎。
·neutron L3 agent
為虛擬機器訪問外部網路提供三層轉發服務,負責路由,浮動IP分配,地址轉換和安全組管理。
通過iptables實現安全組,路由和地址轉換。
每個虛擬路由執行在一個network namespace中,每個namespace由qroute -< router -< UUID命名。
·neutron-dhcp-agent
為虛擬機器提供DHCP服務。
【建立虛擬機器的網路過程】
1. nova-compute向Neutron Server傳送一個請求虛擬機器IP地址的請求
2. Neutron Server收到請求後為虛擬機器建立MAC和IP地址,並存儲到資料庫中
3. Neutron Server將資訊傳送給DHCP-agent
4. DHCP-agent收到資訊後將對應資訊傳送給dnsmasq,dnsmasq將資訊儲存起來
5. nova建立虛機後會初始化MAC地址
6. 當虛機啟動的時候,預設的ip地址是0.0.0.0,會發送一個廣播,dnsmasq會監聽到虛擬機發送的報文,然後將對應MAC地址的IP地址返回給虛擬機器,這樣虛擬機器啟動完成後就會有IP地址了
【網路虛擬化】
網路(network)是一個隔離的二層網段,類似於物理網路中的LAN(VLAN)。
具體一點,它是為建立它的租戶保留的一個廣播域。
埠和子網始終被分配給某個特定的網路。
跨網路的子網之間的流量必須走L3 Vritual Router。
每個網路使用自己的DHCP Agent,每個DHCP Agent在一個Network namespace內。
不同網路內的IP可以重複。
根據建立網路的使用者,Neutron L2 network 可以分為:
Provider network: 管理員建立的和物理網路有直接對映關係的虛擬網路。
Tenant network: 租戶(普通使用者)建立的網路,物理網路對建立者透明,配置由 Neutron 的配置決定。
Provider Network 是由 OpenStack 管理員建立的,直接對應於資料中心的已有物理網路的一個網段。這種網路有三個和物理網路有關屬性:
provider:network_type (網路型別,包括 vxlan, gre, vlan, flat, local)
provider:segmentation_id (網段 ID, 比如 VLAN 的 802.1q tag, GRE 網路的 Tunnel ID, VXLAN 網路的 VNI)
provider:physical_network (物理網路的邏輯名稱,比如 physnet1, ph-eth1, etc)
【虛擬網路型別】
·Local
本地的Linux Bridge,除了虛擬機器的網絡卡,不連線其他的網路裝置,實際場景使用較少。
·Flat
不帶vlan tag的網路,相當於local網路的Linux Bridge連線到一個物理網絡卡,該網路中的instance可以於網路中的instance通訊。
所有的租戶都在同一個網路內,沒有進行網路隔離,容易產生廣播風暴。
可以跨節點,實際場景也較少。
neutron net-create NAME --provider:network_type flat \ --provider:physical_network PHYS_NET_NAME |
·VLAN
基於物理Vlan網路實現,共享同一個物理網路的多個Vlan網路是相互隔離的,甚至可以使用重疊的IP空間。
每個支援VLAN network的物理網路可以被視為一個分離的VLAN trunk,使用一組獨佔的vlan id。(有效段為1~4096)
私有云網路應用較多。
neutron net-create NAME --provider:network_type vlan \ --provider:physical_network PHYS_NET_NAME \ --provider:segmentation_id VID |
·VXLAN
基於隧道技術的 overlay 網路,通過唯一的 VNI 區分於其他的 vxlan 網路,不和具體的物理網路繫結。
在 vxlan 中,資料包通過 VNI 封裝成UDP包進行傳輸,因為二層的包通過封裝在三層傳輸,能夠克服vlan和物理網路基礎設施的限制。
neutron net-create NAME --provider:network_type vxlan \ --provider:segmentation_id TUNNEL_ID |
·GRE
與vxlan類似的一種overlay網路,使用IP包進行封裝。
GRE 封裝的資料包基於 IP 路由表來進行路由,因此 GRE network 不和具體的物理網路繫結。(基於隧道)
neutron net-create NAME --provider:network_type gre \ --provider:segmentation_id TUNNEL_ID |
【虛擬網路型別特點以及應用場景】
模式 |
原理 |
優點 |
缺點 |
vlan |
劃分vlan,使用vlan_id隔離廣播域 |
適合小規模網路部署 |
必須和物理交換機的vlan_id繫結,最多隻能有4096個 |
GRE |
和vlan模式不同的.是vlan id 會被轉換成gre id,外面在封IP.通過隧道轉發出去. 2層的包,通過IP來轉發.物理層的3層通訊,虛擬上的2層通訊. |
gre id 可以有1600W個 沒有mac地址表過大的問題,物理交換機,只需要記住一個eth0的mac地址 3層網路的通訊 |
兩個階段需要建隧道,方案不成熟 |
VXLAN |
相比較於gre,不使用隧道 本質: 2層的包+封裝vxlan id + 組播地址+ + udp報頭 + ip 報頭+資料包 |
不需要建隧道,使用udp 方便的安全策略 和gre id一樣,也有1600W可以使用 |
|
【參考】
https://www.jianshu.com/p/de03140fc60e
https://www.ait24.com/1066.html
https://www.ait24.com/1139.html
http://www.mamicode.com/info-detail-1749637.