openstack之Neutron網絡虛擬化


第一:為什么需要網絡虛擬化?

一.數據中心的現有網絡不能滿足雲計算的物理需求;

互聯網行業數據中心的基本特征就是服務器的規模偏大。進入雲計算時代后,其業務特征變得更加復雜,包括:虛擬化支持、多業務承載、資源靈活調度等(如下圖所示)。與此同時,互聯網雲計算的規模不但沒有縮減,反而更加龐大。這就給雲計算的網絡帶來了巨大的壓力。

                      

                              互聯網雲計算業務特點

1. 大容量的MAC表項和ARP表項

  虛擬化會導致更大的MAC表項。假設一個互聯網雲計算中心的服務器有5000台,按照1:20的比例進行虛擬化,則有10萬個虛擬機。通常每個虛擬機會配置兩個業務網口,這樣這個雲計算中心就有20萬個虛擬網口,對應的就是需要20萬個MAC地址和IP地址。雲計算要求資源靈活調度,業務資源任意遷移。也就是說任意一個虛擬機可以在整個雲計算網絡中任意遷移。這就要求全網在一個統一的二層網絡中。全網任意交換機都有可能學習到全網所有的MAC表項。與此對應的則是,目前業界主流的接入交換機的MAC表項只有32K,基本無法滿足互聯網雲計算的需求。另外,網關需要記錄全網所有主機、所有網口的ARP信息。這就需要網關設備的有效ARP表項超過20萬。大部分的網關設備芯片都不具備這種能力。

2. 4K VLAN Trunk問題

  傳統的大二層網絡支持任意VLAN的虛擬機遷移到網絡的任意位置,一般有兩種方式。方式一:虛擬機遷移后,通過自動化網絡管理平台動態的在虛擬機對應的所有端口上下發VLAN配置;同時,還需要動態刪除遷移前虛擬機對應所有端口上的VLAN配置。這種方式的缺點是實現非常復雜,同時自動化管理平台對多廠商設備還面臨兼容性的問題,所以很難實現。方式二:在雲計算網絡上靜態配置VLAN,在所有端口上配置VLAN trunk all。這種方式的優點是非常簡單,是目前主流的應用方式。但這也帶來了巨大的問題:任一VLAN內如果出現廣播風暴,則全網所有VLAN內的虛擬機都會受到風暴影響,出現業務中斷。

3. 4K VLAN上限問題

  雲計算網絡中有可能出現多租戶需求。如果租戶及業務的數量規模超出VLAN的上限(4K),則無法支撐客戶的需求。

4. 虛擬機遷移網絡依賴問題

  VM遷移需要在同一個二層域內,基於IP子網的區域划分限制了二層網絡連通性的規模。

二.數據中心的現有網絡不能滿足雲計算的軟件化即SDN要求。

  數據中心(Data Center)中的物理網絡是固定的、需要手工配置的、單一的、沒有多租戶隔離的網絡,無法滿足現有的需求。

  雲架構往往是多租戶架構,這意味着多個客戶會共享單一的物理網絡。因此,除了提供基本的網絡連接能力以外,雲還需要提供網絡在租戶之間的隔離能力;同時雲是自服務的,這意味着租戶可以通過雲提供的 API 來使用虛擬出的網絡組建來設計,構建和部署各種他們需要的網絡

小結:數據中心現有的物理網絡基礎之上疊加一層我們自己的虛擬網絡

第二:網絡虛擬化

一:openstack相關網絡

  在實際的數據中心中,與openstack相關的物理網絡可以分為三層:

  1. OpenStack Cloud network:OpenStack 所管理的網絡。

      2. 機房intranet (external network):數據中心所管理的的公司網(Intranet) ,虛機使用的 Floating IP 是這個網絡的地址的一部分。

      3. 真正的外部網絡即 Internet:由各大電信運營商所管理的公共網絡,使用公共IP。

二:網絡(Neutron L2 network)

  網絡(network)是一個隔離的二層網段,類似於物理網絡世界中的虛擬 LAN (VLAN)。更具體來講,它是為創建它的租戶而保留的一個廣播域,或者被顯式配置為共享網段。端口和子網始終被分配給某個特定的網絡。這里所謂的隔離,可理解為:

  1.跨網絡的子網之間的流量必須走 L3 Virtual Router

  2.每個網絡使用自己的 DHCP Agent,每個 DHCP Agent 在一個 Network namespace 內

  •   3.不同網絡內的IP地址可以重復(overlapping)

根據創建網絡的用戶的權限,Neutron L2 network 可以分為:

  • Provider network:管理員創建的和物理網絡有直接映射關系的虛擬網絡。
  • Tenant network:租戶普通用戶創建的網絡,物理網絡對創建者透明,其配置由 Neutron根據管理員在系統中的配置決定。

虛機可以直接掛接到 provider network 或者 tenant network 上  “VMs can attach directly to both tenant and provider networks, and to networks with any provider:network_type value, assuming their tenant owns the network or its shared.”。

根據網絡的類型,Neutron L2 network 可以分為:

  • Flat network:基於不使用 VLAN 的物理網絡實現的虛擬網絡。每個物理網絡最多只能實現一個虛擬網絡。
  • local network(本地網絡):一個只允許在本服務器內通信的虛擬網絡,不知道跨服務器的通信。主要用於單節點上測試。
  • VLAN network(虛擬局域網) :基於物理 VLAN 網絡實現的虛擬網絡。共享同一個物理網絡的多個 VLAN 網絡是相互隔離的,甚至可以使用重疊的 IP 地址空間。每個支持 VLAN network 的物理網絡可以被視為一個分離的 VLAN trunk,它使用一組獨占的 VLAN ID。有效的 VLAN ID 范圍是 1 到 4094。
  • GRE network (通用路由封裝網絡):一個使用 GRE 封裝網絡包的虛擬網絡。GRE 封裝的數據包基於 IP 路由表來進行路由,因此 GRE network 不和具體的物理網絡綁定。
  • VXLAN network(虛擬可擴展網絡):基於 VXLAN 實現的虛擬網絡。同 GRE network 一樣, VXLAN network 中 IP 包的路由也基於 IP 路由表,也不和具體的物理網絡綁定。

注:現在企業環境中一般使用vlan,gre,vxlan網絡模式,后續博客會詳細介紹這三種網絡模式

三.Neutron L2 network的Provider network模式

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) 

  這種網絡是可以在多個租戶之間共享的。這種網絡通過計算和網絡節點上指定的 bridge 直接接入物理網絡,所以默認的情況下它們是可以路由的,因此也不需要接入 Neutron Virtual Router,也不需要使用 L3 agent。使用這種網絡,必須預先在各計算和網絡節點上配置指定的網橋。

  雖然可以創建 GRE 和 VXLAN 類型的 Provider network, 但是(個人認為)Provider network 只對 Flat 和 VLAN 類型的網絡才有意義,因為 Provider network 的一個重要屬性是 provider:physical_network,而這個參數對其他網絡類型沒有意義。

創建 provider network:

  • local 類型的:neutron net-create NAME --provider:network_type local
  • flat 類型的:neutron net-create NAME --provider:network_type flat --provider:physical_network PHYS_NET_NAME
  • vlan 類型的:neutron net-create NAME --provider:network_type vlan --provider:physical_network PHYS_NET_NAME --provider:segmentation_id VID
  • gre 類型的:neutron net-create NAME --provider:network_type gre --provider:segmentation_id TUNNEL_ID
  • vxlan 類型的:neutron net-create NAME --provider:network_type vxlan --provider:segmentation_id TUNNEL_ID

 四.Neutron L2 network的Tenant network

Tenant network 是由 tenant 的普通用戶創建的網絡。默認情況下,這類用戶不能創建共享的 tenant network(因此 Nuetron Server 的policy 設置了"create_network:shared": "rule:admin_only"。),因此這種網絡是完全隔離的,也不可以被別的 tenant 共享。

    Tenant network 也有 local,flat,vlan,gre 和 vxlan 等類型。但是,tenant 普通用戶創建的 Flat 和 VLAN tenant network 實際上還是 Provider network,所以真正有意義的是 GRE 和 VXLAN 類型,這種網絡和物理網絡沒有綁定關系。

    創建 tenant network 的過程:

(0)管理員在 neutron 配置文件中配置 tenant_network_types,其值可以設為一個所支持的網絡類型列表,比如 “vlan,gre,vxlan”。其默認值為 “local“,因此需要改變。該值表明該 OpenStack 雲中允許被創建的 tenant network 類型。 

(1)運行命令 neutron net-create <net_name>

(2)neutron server 逐一根據該配置項嘗試創建 network segment,成功則立即返回。

    創建每種網絡時,使用不同的配置項:

網絡類型 配置項 說明 實例 
vlan
  • network_vlan_ranges = physnet1:1000:2999,physnet2
  • 指定所使用的物理網絡的標簽和支持的 VLAN ID 范圍

 

network_vlan_ranges = default:2000:3999
integration_bridge = br-int
bridge_mappings = default:br-eth1

flat
  • flat_networks = physnet1,physnet2
  • 指定所使用的物理網絡的 label
 
gre
  • tunnel_id_ranges =a list of <tun_min>:<tun_max>
  • local_ip = <ip>
  •  一組可用的 GRE ID 區間列表;
  • 建立 GRE Tunnel 使用的 IP 地址
 

enable_tunneling = true
tunnel_id_ranges = 1:1000
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = 10.0.0.3

 vxlan  
  • vni_ranges = a list of <vni_min>:<vni_max>
  • local_ip = <ip>
  • vxlan_group = 239.1.1.1
  •  一組可用的 VNI 區間列表;
  • 建立 VxLAN Tunnel 使用的 IP 地址
  • VXLAN 組播組
 

enable_tunneling = true
tunnel_type = vxlan
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = 10.0.0.3
tunnel_types = vxlan

所有  
  • integration_bridge
  • bridge_mappings = default:br-eth1
  • tunnel_bridge
  • enable_tunneling = False
  • 指定intergration bridge 的名稱,默認為 br-int;
  • 指定物理網絡label 和服務器上的 bridge 對應關系;
  • 指定 turnnel bridge 的名稱,默認為 br-tun
  • 是否使用 tunneling 類型的網絡,包括 GRE 和 VxLAN。使用的話,ML2 agent 會在每個計算和網絡節點創建名稱為 tunnel_bridge 的 tunnel bridge。

五:Provider與Tenant的區別

  • Provider network 是由 Admin 用戶創建的,而 Tenant network 是由 tenant 普通用戶創建的。
  • Provider network 和物理網絡的某段直接映射,比如對應某個 VLAN,因此需要預先在物理網絡中做相應的配置。而 tenant network 是虛擬化的網絡,Neutron 需要負責其路由等三層功能。
  • 對 Flat 和 VLAN 類型的網絡來說,只有 Provider network 才有意義。即使是這種類型的 tenant network,其本質上也是對應於一個實際的物理段。
  • 對 GRE 和 VXLAN 類型的網絡來說,只有 tenant network 才有意義,因為它本身不依賴於具體的物理網絡,只是需要物理網絡提供 IP 和 組播即可。
  • Provider network 根據 admin 用戶輸入的物理網絡參數創建;而 tenant work 由 tenant 普通用戶創建,Neutron 根據其網絡配置來選擇具體的配置,包括網絡類型,物理網絡和 segmentation_id。
  • 創建 Provider network 時允許使用不在配置項范圍內的 segmentation_id。

六:子網

  子網是一組 IPv4 或 IPv6 地址以及與其有關聯的配置。它是一個地址池,OpenStack 可從中向虛擬機 (VM) 分配 IP 地址。每個子網指定為一個無類別域間路由 (Classless Inter-Domain Routing) 范圍,必須與一個網絡相關聯。除了子網之外,租戶還可以指定一個網關、一個域名系統 (DNS) 名稱服務器列表,以及一組主機路由。這個子網上的 VM 實例隨后會自動繼承該配置。 

    在創建虛擬主機時,nova-network會從指定子網中取一個空閑IP並將它寫入此虛擬主機的配置文件。在一個子網內的虛擬主機可以通過創建Linux橋實現互通。

七:端口

  一個 Port 代表虛擬網絡交換機(logical network switch)上的一個虛機交換端口(virtual switch port)。虛機的網卡(VIF - Virtual Interface)會被連接到 port 上。當虛機的 VIF 連接到 Port 后,這個 vNIC 就會擁有 MAC 地址和 IP 地址。Port 的 IP 地址是從 subnet 中分配的。

八:虛擬交換機

  Neutron 默認采用開源的 Open vSwitch 作為其虛機交換機,同時還支持使用 Linux bridge。

九:虛擬路由器

  一個 Virtual router 提供不同網段之間的 IP 包路由功能,由 Nuetron L3 agent 負責管理

 

          nova管理的vm與neutron提供的虛擬網絡之間的關系

第三:二層網絡虛擬化的實現 

一個標准 OpenStack 環境中的物理網絡配置往往包括:

  • Internet(Pulic network):傳統意義上的公共網絡,使用往往由電信運營商提供的公共IP。
  • 外部網絡(External network):數據中心 Intranet,從這里分配浮動IP地址。
  • OpenStack 內部網絡:
    • 管理網絡(management network):提供 OpenStack 各個組件之間的內部通信,以及 API 訪問端點(Endpoint)。為安全考慮,該網絡必須限制在數據中心之內。
    • API 網絡:其實這不是一個單獨的網絡,而是包含在外部和內部網絡中。API 的 Endpoint 包括 publicurl 和 internalurl,其中,publicurl  包含的是 externa network 的 IP 地址,internal network 包含的是 management network IP 地址。為了簡單起見,提供給內外網絡訪問的API的 publicurl 和 internalurl 相同,而只給內部網絡訪問的 API 只使用 internalurl。
    • 數據網絡(data network):除管理網絡以外的其它網絡,往往還可以細分為下面幾種。它們可以合為一種,也可以從性能方面考慮分離出一種或幾種作為單獨的網絡。
      • 租戶網絡(Tenant network):提供虛機在計算節點之間,以及計算節點和網絡節點之間的通信。同樣這也是數據中心的內部網絡。
      • 存儲訪問網絡(storage access network):訪問存儲的網絡。
      • 存儲后端網絡(storage backend network):比如 Ceph 和 Swift 集群用於后端數據復制的網絡。
  • 除了以上網絡外,往往還有各種功能網絡,包括 IPMI 網絡,PXE 網絡,監控網絡等等。

一. 大二層的概念

 

  二層指的是數據鏈路層,計算機與計算機之間的通信采用的是基於以太網協議廣播的方式,而大二層的概念指的是openstack中所有的vm都處於一個大的二層網絡中,大二層也可以被想象成一堆二層交換機串聯到一起。這么做的目的就是為了滿足vm可以遷移到全網的任意位置,二層無需網關,無需路由,因而資源調用更加靈活,反之,如果所有vm不在一個大二層中,那么vm遷移到另外一個位置(另外一個網絡中),則需要我們人為地指定網關,添加路由策略,然而這還只是針對一台vm的遷移,要滿足所有的vm的動態遷移,再去指定網關、路由等就不現實了。

二.物理的二層與虛擬的二層(vlan模式)

  物理的二層指的是:物理網絡是二層網絡,基於以太網協議的廣播方式進行通信

     虛擬的二層指的是:neutron實現的虛擬的網絡也是二層網絡(openstack的vm機所用的網絡必須是大二層),也是基於以太網協議的廣播方式進行通信,但毫無疑問的是該虛擬網絡依賴於物理的二層網絡

三.物理的三層與虛擬的二層(gre模塊與vxlan模式)

  物理的三層指的是:物理網絡是三層網絡,基於ip路由的方式進行通信

    虛擬的二層指的是:neutron實現的虛擬的網絡仍然是二層網絡(openstack的vm機所用的網絡必須是大二層),仍然是基於以太網協議的廣播方式進行通信,但毫無疑問的是該虛擬網絡依賴於物理的三層網絡,這有點類似於VPN的概念,根本原理就是將私網的包封裝起來,最終打上隧道的ip地址傳輸。

四.虛擬路由器

跨子網的通信需要走虛擬路由器。同物理路由器一樣,虛擬路由器由租戶創建,擁有多個 virtual interface,連接一個租戶的子網,以及外部網絡。它具有以下特性:

  • 一個 VR 只屬於創建它的租戶,只用於該租戶的子網之間和子網與外網的路由
  • 同一網絡內的若干子網可以掛在一個 VR 上
  • 同一租戶的不同網絡的沒有 IP 地址重疊的子網可以掛在一個 VR 上
  • 不同租戶之間的內網之間是不能使用 VR 的
  • 同一租戶的不同網絡內的有 IP 地址重疊的兩個子網不能使用同一個 VR(添加子網到 VR 時會報錯)
  • 在網絡節點上,一個 VR 運行在一個 Network namespace 內,該namespace 的名稱包含該 VR 的 UUID

五.dhcp服務

 DHCP 服務是網絡環境中必須有的。Neutron 提供基於 Dnamasq (輕型的dns和dhcp服務)實現的虛機 DHCP 服務,向租戶網絡內的虛機動態分配固定 IP 地址。它具有以下特性:

  • 一個網絡可以有多個運行在不同物理網絡節點上的 DHCP Agent,同時向網絡內的虛機提供服務
  • 一個 DHCP Agent 只屬於一個網絡,在網絡節點上運行在一個 network namespace 內
  • 網絡內的子網共享該 DHCP Agent

第四:Neutron租戶網路的隔離性

Neutron 實現了不同層次的租戶網絡隔離性:

  • 租戶之間的網絡是三層隔離的,連通過 VR 做路由都不行,實在要連通的話,需要走物理網絡
  • 一個租戶內的不同網絡之間二層隔離的,需要通過 VR 做三層連通
  • 一個網絡內的不同子網也是二層隔離的,需要通過 VR 做三層連通

    Neutron 對每個租戶網絡(tenant network)都分配一個 segmentation_id,其特點包括:

  • 每個 tenant network 都有一個這種 ID
  • 每個租戶網絡的 ID 在全部的租戶范圍內都是唯一的
  • 一個 ID 代表一個廣播域
  • 一個 ID 使得同一網絡內的兩個虛機之間好像建立了一個虛擬通道(tunnel)一樣
  • 不同 ID 的網絡 tunnel 之間是互相隔離的
  • 根據物理實現不同,該ID被實現為幾種不同的形式:
    • VLAN ID
    • GRE Tunnel ID
    • VxLAN VNI

原圖鏈接:https://pinrojas.com/2014/07/29/theres-real-magic-behind-openstack-neutron/

  • (1)計算節點的 br-int 上,neutron 為每個虛機連接 OVS 的 access port 分配了內部的 VLAN Tag。這種 tag 限制了網絡流量只能在 tenant network 之內。
  • (2)計算節點的 br-tun 上,neutron 將內部的 VLAN Tag 轉化為 GRE Tunnel ID,是的不同 network 的流量走不通的 tunnel。
  • (3)網絡節點的 br-tun 上,neutron 將 GRE Tunnel ID 轉發了一一對應的 內部 VLAN Tag,使得網絡流被不同的服務處理。
  • (4)網絡節點的 br-int 上連接的 DHCP 和 L3 agent 使用 Linux network namespace 進行隔離。

第五 Neutron租戶網絡的安全性(security)

除了租戶的隔離性以外,

  • Neutron 還提供數據網絡與外部網絡的隔離性。默認情況下,所有虛機通往外網的流量全部走網絡節點上的 L3 agent。在這里,內部的固定 IP 被轉化為外部的浮動 IP 地址。這種做法一方面保證了網絡包能夠回來,另一方面也隱藏了內部的 IP 地址。
  • Neutron 還是用 Linux iptables 特性,實現其 Security Group 特性,從而保證訪問虛機的安全性。
  • Neutron利用網絡控制節點上的 network namespace 中的 iptables,實現了進出租戶網絡的網絡包防火牆,從而保證了進出租戶網絡的安全性。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM