1. 程式人生 > >Neutron 理解 (1): Neutron 所實現的虛擬化網路 [How Netruon Virtualizes Network]

Neutron 理解 (1): Neutron 所實現的虛擬化網路 [How Netruon Virtualizes Network]

1. 為什麼要網路虛擬化?

個人認為,這裡主要有兩個需求:一個是資料中心的現有網路不能滿足雲端計算的物理需求;另一個是資料中心的現有網路不能滿足雲端計算的軟體化即SDN要求。

1.1 現有物理網路不能滿足雲端計算的需求

    網際網路行業資料中心的基本特徵就是伺服器的規模偏大。進入雲端計算時代後,其業務特徵變得更加複雜,包括:虛擬化支援、多業務承載、資源靈活排程等(如圖1所示)。與此同時,網際網路雲端計算的規模不但沒有縮減,反而更加龐大。這就給雲端計算的網路帶來了巨大的壓力。

 

圖1. 網際網路雲端計算的業務特點

(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子網的區域劃分限制了二層網路連通性的規模。

資料來源

1.2 雲端計算的 SDN 要求

    資料中心(Data Center)中的物理網路是固定的、需要手工配置的、單一的、沒有多租戶隔離的網路。這是一個物理網路區域性例項:

 

(圖1, 來源:Cisco 網站。 TOR:Top On Rack 交換機。圖中的一個伺服器有三塊網絡卡,分別連到連線資料網路和管理網路的交換機。)

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

   

(左圖-圖3: 計算虛擬化和網路虛擬化。來源)                                                 (右圖-圖4:來源 MidoNet 提供的物理網路和邏輯網路的對映)

   OpenStack 雲也不例外。 OpenStack 通過 Neutron 專案在物理網路環境之上提供滿足多租戶要求的虛擬網路和服務。Neutron 提供的網路虛擬化能力包括:

  • (1)二層到七層網路的虛擬化:L2(virtual switch)、L3(virtual Router 和 LB)、L4-7(virtual Firewall )等
  • (2)網路連通性:二層網路和三層網路
  • (3)租戶隔離性
  • (4)網路安全性
  • (4)網路擴充套件性
  • (5)REST API
  • (6)更高階的服務,包括 LBaaS,FWaaS,VPNaaS 等。具體以後再慢慢分析。

2. Neutron 網路虛擬化

    在實際的資料中心中,網路可以分為三層:OpenStack Cloud network,機房intranet (external network),以及真正的外部網路即 Internet。External 網路和Internet 之間是資料中心的 Uplink 路由器,它負責通過 NAT 來進行兩個網路之間的IP地址(即 floating IP 和 Internet/Public IP)轉換,因此,這部分的控制不在 OpenStack 控制之下,也不在本文的主要探討範圍之內。

 

  • OpenSack Cloud network:OpenStack 所管理的網路。
  • External network:資料中心所管理的的公司網(Intranet) ,虛機使用的 Floating IP 是這個網路的地址的一部分。
  • Internet:由各大電信運營商所管理的公共網路,使用公共IP。

這是 RedHat 提供的一個 OpenStack Cloud network 網路架構:

大概地分類的話,該網路管理網路 和 資料網路,資料網路中關鍵的是租戶網路,用於租戶虛機之間的通訊。這部分也是 Neutron 所實現的網路虛擬化的核心。在目前的Neutron 實現中,Neutron 向租戶提供虛擬的網路(network)、子網(subnet)、埠 (port)、交換機(switch)、路由器(router)等網路元件。下圖顯示了虛擬網路和物理網路的對映關係:

(圖5.來源:2015 OpenStack技術大會-Neutron雲端計算網路虛擬化-龔永生.pdf)

2.1 網路(L2 network)

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

  • 跨網路的子網之間的流量必須走 L3 Virtual Router
  • 每個網路使用自己的 DHCP Agent,每個 DHCP Agent 在一個 Network namespace 內
  • 不同網路內的IP地址可以重複(overlapping)

根據建立網路的使用者的許可權,Neutron network 可以分為:

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

虛機可以直接掛接到 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 network 可以分為:

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

注:在AWS中,該概念對應 VPC 概念。AWS 對 VPC 的數目有一定的限制,比如每個賬戶在每個 region 上預設最多隻能建立 5 個VPC,通過特別的要求最多可以建立 100 個。

2.1.1 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

2.1.3 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,成功則立即返回。

複製程式碼
def allocate_tenant_segment(self, session):
    for network_type in self.tenant_network_types: #挨個試
        driver = self.drivers.get(network_type)
        segment = driver.obj.allocate_tenant_segment(session)
        if segment: #返回第一個成功的 segment
            return segment
    raise exc.NoNetworkAvailable()
複製程式碼

    建立每種網路時,使用不同的配置項:

網路型別 配置項 說明 例項 
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。

2.1.4 Provider network 和 Tenant network 的區別

 

(圖6.來源:google)

幾個區別:

  • 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。

2.1.5 多網段 Provider network (multi-segment provider network)

    預設情況下,使用者只能建立單網段 provider network。這個 Blueprint 使得 Neutron 能夠支援建立多網段網路。這種網路由相同或者不同網路型別的多個網段(network segments)組成一個廣播域。一個 Port 只能在一個 segment 中分配。

    一個例項:

[email protected]:~$ neutron net-create multinet --segments type=dict list=true provider:physical_network=physnet1,provider:segmentation_id=153,provider:network_type=vlan provider:physical_network='',provider:segmentation_id=801,provider:network_type=vxlan


Created a new network:
+-----------------+-------------------------------------------------------------------------------------------------------------+
| Field           | Value                                                                                                       |
+-----------------+-------------------------------------------------------------------------------------------------------------+
| admin_state_up  | True                                                                                                        |
| id                     | 206ae34c-7993-4128-b14d-196e084fbefe                                                                        |
| name                | multinet                                                                                                    |
| router:external  | False                                                                                                       |
| segments          | {"provider:network_type": "vlan", "provider:physical_network": "physnet1", "provider:segmentation_id": 153} |
|                         | {"provider:network_type": "vxlan", "provider:physical_network": null, "provider:segmentation_id": 801}      |
| shared              | False                                                                                                       |
| status               | ACTIVE                                                                                                      |
| subnets             |                                                                                                             |
| tenant_id          | 74c8ada23a3449f888d9e19b76d13aab                                                                            |
+-----------------+-------------------------------------------------------------------------------------------------------------+

下圖中的網路包括型別分別為 flat,gre 和 vlan 的三個網段:

(圖7。來源 google)

2.1.6 Mirantis 描述的網路

Mirantis 將邏輯網路分為以下三大類:

  • public network (公共網路)
    • 虛機通過 pulic network 訪問 internet。它分配外部的 IP 地址給網路節點,以及在使用 DVR 時分配給計算節點,然後虛機通過 SNAT 來訪問外網。
    • 它也向 public endpoints 提供虛擬IP,用於外網訪問 openstack service api。
    • 管理員制定一個相鄰的地址區間給浮動IP使用。
    • 需要將 public network 與其它網路隔離。
  • internal network (內部網路)
    • internal network 是出了 public network 和 provate network 的其他網路的統稱,包括儲存,管理,PXE 網路等。
      • 內部網路 - PXE 網路,用於環境部署
      • 儲存網路 - 用於儲存訪問
      • 管理網路 - 包括資料庫,MQ,HA 服務,以及計算和儲存節點之間的 iSCSI 網路。
    • 內部網路將各節點連線起來。openstack 環境中的各個模組之間的互動通過內部網路進行。
    • 不要將 internal network 和 private network 混淆,private network 只用於虛機之間的通訊。
    • 出於安全考慮,需要將內部網路從 public 和 private network 隔離出來。
  • Private network (私有網路)
    • 用於虛機之間的通訊,包括 VLAN, GRE/VXLAN 等型別的虛擬網路都會執行在私有網路之上。

當 Neutorn 使用 VLAN 模式時候的網絡卡分配方案:

  • 三網絡卡方案:

eth0 - PXE 網路
eth1 - 公共網路(untagged),管理網路(tag=102),儲存網路(tag=103)
eth2 - 私有網路

  • 四網絡卡方案

eth0 - PXE 網路
eth1 - 公共網路(untagged),管理網路(tag=102)
eth2 - 私有網路
eth3 - 儲存網路

這是 OVS + VLAN 使用三塊網絡卡時的配置示例:

當 Neutorn 使用 隧道(GRE或者 VXLAN) 模式時候的網絡卡分配方案:

  • 兩網絡卡方案

eth0 - PXE 網路
eth1 - 公共網路(untagged),管理網路(tag=102),儲存網路(tag=103)

  • 三網絡卡方案:

eth0 - PXE 網路
eth1 - 公共網路(untagged),管理網路(tag=102)
eth2 - 儲存網路

  • 四網絡卡方案

eth0 - PXE 網路
eth1 - 管理網路
eth2 - 公共網路
eth3 - 儲存網路

 這是 OVS + GRE 配置示例:

2.2 子網 (subnet)

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

   在 OpenStack Kilo 版本之前,使用者需要自己輸入 CIDR。Kilo 版本中實現了這個 Blueprint,使得 Neutron 能夠從使用者指定的 CIDR Pool 中自動分配 CIDR。

   注:在AWS中,該概念對應其 Subnet 概念。AWS 對 Subnet 的數目有一定的限制,預設地每個 VPC 內最多隻能建立 200 個 Subnet。從CIDR角度看,一個 VPC 有一個比較大的網段,其中的每個 Subnet 分別擁有一個較小的網段。這種做法和OpenStack 有區別,OpenStack 中建立網路時不需要指定 CIDR。

2.3 埠 (Port)

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

2.4 虛機交換機 (Virtual switch)

  Neutron 預設採用開源的 Open vSwitch 作為其虛機交換機,同時還支援使用 Linux bridge。

2.5 虛擬路由器 (Virtual router)

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

2.6 各元件之間的關係

  OpenStack 實際上並未增加網路功能。路由、交換和名稱解析是由底層的網路基礎架構處理的。OpenStack 的作用是將這些元件的管理捆綁在一起,並將它們連線到計算工作負載。

(圖8.來源 google)

3. 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 網路,監控網路等等。這部分就略去不談了。

    

這幾種網路,在物理交換機上,往往都使用 VLAN 來做網路隔離。現在討論的只是租戶網路即虛機之間通訊的網路,在 Neutron 的實現看來,該網路的連通性包括幾個層次:

  • 同主機和不同主機上一個網段內的虛機之間的連線性:虛擬二層網路,走物理二層(VLAN)或者三層(GRE/VxLAN)網路。
  • 不同網段內的虛機之間的連通性:經過物理(VLAN)或者 Neutron Virtual router
  • 虛機和外部網路之間的連通性:經過物理路由器(給 VLAN 虛擬網路實用的物理交換機連線的路由器)或者 Neutron Virtual router

3.1 虛擬二層網路的實現

    所謂虛擬二層網路,就是提供給虛機的一種虛擬網路,使得虛機可以和同網段中的其它虛機就像在物理二層網路一樣在網路二層直接通訊,不管目的虛機處於什麼物理位置。也就是說,對虛機來說,物理三層網路對它是透明的。

3.1.1 使用 VLAN 實現虛擬二層網路

(圖10.來源:google) 

3.1.2 基於 GRE/VxLAN 實現的二層網路 (L2)

    除了 VLAN 方式的物理的二層網路,另一種方式使用Tunnel/Overlay 方式實現虛機二層網路。那Overlay如何應對雲端計算網路的挑戰呢?

(1)首先,Overlay的核心是重新構建一個邏輯網路平面,其技術手段的關鍵是採用隧道技術實現L2oIP的封裝。通過隧道實現各虛擬機器之間的二層直連。這樣網路只看見Overlay邊緣節點的MAC地址,物理網路學習到的MAC表項非常有限,現有接入交換機32K的MAC表項足以滿足需求(如下圖所示)。對應的Overlay邊緣節點實現基於會話的地址學習機制,也就是說只學習有互動流量的虛擬機器MAC地址。這樣也嚴格限制了邊緣節點的地址表項。

 

Overlay網路如何應對雲端計算網路的挑戰

(2)其次,Overlay網路僅僅是一個邏輯上的二層直連網路。其依賴的物理網路,是一個傳統的路由網路。這個路由網路是一個三層到邊緣的網路。也就是說二層廣播域被縮小到極致。這樣,網路風暴潛在的風險大幅度降低。同時,對於一些需要依賴二層廣播的協議報文,例如:ARP報文,Overlay網路通過ARP代理等方式實現協議的內容透傳,不會影響協議報文的正常運作。

(3)再次,針對4K VLAN上限問題,Overlay網路通過L2oIP的封裝欄位,提供24bits長度的隔離ID,最大可以支援16M租戶或業務。

(4)最後,針對網路虛擬化問題。Overlay網路本身就是一個從物理網路中抽離的邏輯網路,通過名址分離使得內層IP地址完全作為一個定址標籤,不再具備路由功能,可以實現不同subnet之間二層互通,保證二層網路的連通性不受IP地址段的限制。

資料來源

  在 Neutron 中,Neutron 將虛機發出的資料幀打包,走三層物理網路到達目的虛機的主機,解包給虛機。這種實現使得兩個虛機的通訊看起來是二層網路通訊。

(圖11.來源:google)

3.2 虛擬路由器 (virtual router)

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

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

具體會在後面的文章中分析。

 

(圖12。來源:google)

3.3 DHCP 服務

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

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

4. Neutron 租戶網路的隔離性(isolation of tenant network)

    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

以下圖描述的 GRE 型別的網路為例:

 

相關推薦

Neutron 理解 (1): Neutron 實現虛擬化網路 [How Netruon Virtualizes Network]

1. 為什麼要網路虛擬化? 個人認為,這裡主要有兩個需求:一個是資料中心的現有網路不能滿足雲端計算的物理需求;另一個是資料中心的現有網路不能滿足雲端計算的軟體化即SDN要求。 1.1 現有物理網路不能滿足雲端計算的需求     網際網路行業資料中心的基本特徵就是伺服

Neutron 理解 (1): Neutron 實現網路虛擬化 [How Neutron Virtualizes Network]

學習 Neutron 系列文章:  1. 為什麼要網路虛擬化? 個人認為,這裡主要有兩個需求:一個是資料中心的現有網路不能滿足雲端計算的物理需求;另一個是資料中心的現有網路不能滿足雲端計算的軟體化即SDN要求。 1.1 現有物理網路不能

理解OpenShift(1):網路之 Router 和 Route Neutron 理解 (7): Neutron 是如何實現負載均衡器虛擬化

 理解OpenShift(1):網路之Router 和 Route   1. OpenShift 為什麼需要 Router 和 Route? 顧名思義,Router 是路由器,Route 是路由器中配置的路由。OpenShift 中的這兩個概念是為了解決從叢集外部(就是從除了叢集節點

Neutron 理解 (6): Neutron 是怎麼實現虛擬三層網路的 [How Neutron implements virtual L3 network]

學習 Neutron 系列文章:     Neutron 對虛擬三層網路的實現是通過其 L3 Agent (neutron-l3-agent)。該 Agent 利用 Linux IP 棧、route 和 iptables 來實現內網內不同網路內的虛機之間的網路流量

Neutron 理解 (7): Neutron 是如何實現負載均衡器虛擬化的 [LBaaS V1 in Juno]

學習 Neutron 系列文章: 1. 基礎知識 1.1 負載均衡的概念   負載均衡(Load Balancing)是將來訪的網路流量在執行相同應用的多個伺服器之間進行分發的一種核心網路服務。它的功能由負載均衡器(load balancer)提供。負

Neutron 理解 (8): Neutron 是如何實現虛機防火牆的 [How Neutron Implements Security Group]

學習 Neutron 系列文章: 1. 基礎知識 1.1 防火牆(firewall)     防火牆是依照特定的規則來控制進出它的網路流量的網路安全系統。一個典型的場景是在一個受信任的內網和不受信任的外網比如 Internet 之間建立一個屏障。防火牆

Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

學習 Neutron 系列文章:       OVS bridge 有兩種模式:“normal” 和 “flow”。“normal” 模式的 bridge 同普通的 Linux 橋,而 “flow” 模式的 bridge 是根據其流表(flow tab

Neutron 理解 (9): OpenStack 是如何實現 Neutron 網路 和 Nova虛機 防火牆的 [How Nova Implements Security Group and How Neutron Implements Virtua

學習 Neutron 系列文章: 1. Nova 安全組 1.1 配置 節點 配置檔案 配置項 說明 controller  /etc/nova/nova.conf security_group_api =

DOCKER-1-3-虛擬化網路

1.ifconfig檢視網路裝置資訊。安裝網橋工具bridge-utils以使用命令brctl。檢視在執行的容器。brctl show檢視網橋資訊,從docker0有四條連線,分別是在執行容器的連線。檢視ip連線資訊。 2.通過exec -it到busybox容器。通過ifco

Neutron 理解 (3): Open vSwitch + GRE/VxLAN 組網 [Netruon Open vSwitch + GRE/VxLAN Virutal Network]

學習 Neutron 系列文章:     目前,OpenStack Neutron 支援使用兩種隧道網路技術 通用路由封裝(GRE) 和 VxLAN 來實現虛擬的二層網路。這兩種技術大致看起來非常相似,都是需要使用 OpenStack 在計算和網路節點

Neutron 理解 (2): 使用 Open vSwitch + VLAN 組網 [Neutron Open vSwitch + VLAN Virtual Network]

學習 Neutron 系列文章: 1. L2 基礎知識 1.1 VLAN 基礎知識 1.1.1 VLAN 的含義    LAN 表示 Local Area Network,本地區域網,通常使用 Hub 和 Switch 來連線LAN 中的計算機。一般

Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 組網

學習 Neutron 系列文章: 1. 基礎知識 1.1 VXLAN 和 Linux 以及 Linux bridge 的關係     VXLAN 是一個新興的SDN 標準,它定義了一種新的 overlay 網路,它主要的創造者是 VMware,

Zigbee網路架構+ZigBee的體系結構+理解zigbee節點的實現的案例+“51微控制器” 和 “zigbee” 、 “cc2530晶片” 之間的關係+晶片cc2530

ZigBee技術具有強大的組網能力,可以形成星型、樹型和網狀網,可以根據實際專案需要來選擇合適的網路結構; 以下拓撲結構的節點,均是指支援zigbee協議的並以其通訊技術手段,實現節點處所需要功能的產品(例如,完整的電路板,參考後面)。 星形拓撲是最簡單的一種拓撲形

基於tensorflow_gpu 1.9.0實現的第二個神經網路: 對影評的二值分類

示例來源於Tensorflow的官方教程。 基於tensorflow_gpu 1.9.0實現的第二個神經網路:對影評的二值分類,程式碼如下: #!/usr/bin/env python import tensorflow as tf from tenso

OpenStack Neutron(2):建立私有網路並與公網相連

在OpenStack中,建立instance之前必須建立網路。這裡通過Dashbord建立私有網路並且通過虛擬路由器與公網相連。私有網路即Tenant network。1. 建立私有網路及其子網登入Dashbord->Project->Network->Ne

openstack之neutron程式碼分析---(1)neutron初始化流程

Neutron是openstack中用於管理網路的專案。neutron程式碼的入口配置檔案neutron/setup.cfg,我們可以通過這個檔案瞭解整個專案的程式碼結構。文章中程式碼為neutron kilo版本。部分setup.cfg內容如下: … [entry_po

Python實現神經網路Part 1: 實現forward和BP演算法的神經元

主旨和本系列目錄 《Python實現神經網路》是一個文章系列,目的在於:通過實際編寫程式,加深對神經網路所涉及的各類演算法的理解。動機描述詳見“本系列動機”部分。 截止目前本系列已完成部分目錄如下 本系列動機 在學習深度學習理論過程中,由神經元(

神經網路例程-使用(3-1)結構的神經網路實現與、或、異或三種邏輯運算

以下程式碼來自Deep Learning for Computer Vision with Python第十章。 本例程需要在同一檔案內新建四個檔案。分別是1、perceptron.py;2、perceptron_or.py;3、perceptron_and.py;4、pe

Deep Learning-TensorFlow (1) CNN卷積神經網路_MNIST手寫數字識別程式碼實現詳解

import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data import time # 計算開始時間   start = time.clock()

3-1長短時記憶神經網路(LSTM)--簡單程式碼實現

LSTM(Long Short-Term Memory)是長短期記憶網路,是一種時間遞迴神經網路,適合於處理和預測時間序列中間隔和延遲相對較長的重要事件。LSTM 已經在科技領域有了多種應用。基於LSTM的系統可以學習翻譯語言、控制機器人、影象分析、文件摘要、語音識別影象識別