openstack學習-網絡管理

openstack的網絡服務組件爲neutron,它的設計目標是實現“網絡即服務”。
設計上:遵循基於“軟件定義網絡(SDN)"的靈活和自動化原則
實現上:充分利用linux中各種網絡相關的技術

物理網絡與虛擬化網絡

openstack學習-網絡管理

Neutron最爲核心的工作是對二層物理網絡的抽象與管理,物理服務器虛擬化後,虛擬機的網絡功能由虛擬機網卡(vnic)提供,物理交換機也被虛擬化爲虛擬交換機(vswitch),各個vnic連接再vswitch的端口上,最後這些vswitch通過物理服務器的物理網卡訪問外部的物理網絡。

linux網絡虛擬化實現技術

網絡虛擬化主要由分爲三個部分:
網卡虛擬化:TAP,TUN,VETH
交換機虛擬化:linux bridge,open vswitch
網絡隔離:network-namespace

linux網卡虛擬化

openstack學習-網絡管理
TAP設備:模擬一個二層的網絡設備,可以接收和發送二層網絡數據包
TUN設備:模擬一個三層的網絡設備,可以接收和發送三層網絡數據包
VETH:虛擬ethernet接口,通常以pair的方式出現,一端發出的網絡數據包會被另一端接收,可以形成兩個網橋之間的通道

TAP/TUN提供了一臺主機內用戶空間的數據傳輸機制,它虛擬機了一套網絡接口,這套接口和物理的接口無任何區別,可以配置IP,可以路由流量,不同的是它流量只在主機內流通

veth-pari,是成對出現的網絡設備,一端連接協議棧,一端連接彼此,數據從一端出,一端進。它的特性常常用來連接不同的虛擬網絡組件,構建大規模的虛擬網絡拓撲,比如連接linux bridge,ovs等,用於neutron,可以構建非常複雜的網絡形態。

linux bridge

openstack學習-網絡管理
linux brigde:工作於二層的網絡設備,功能類似物理交換機
brigde可以綁定linux上其他網絡設備,並將這些設備虛擬化爲端口
當一個網絡設備被綁定到bridge上,就相當於物理交換機端口插入了一條連接終端的網線。
使用brctl命令配置linux brige

open vswitch

相比linux bridge的小規模的主機內部通信場景,open vswitch更適合大規模的多主機通信場景
openstack學習-網絡管理

network namespace

openstack學習-網絡管理
network namespace能創建多個隔離的網絡空間,他們有獨立的網絡配置信息,例如網絡設備,路由表,iptables等。
不同的網絡空間中的虛擬機運行的時候彷彿就在自己的獨立網絡中。

network namespace通常於vrf(virtual routing fowarding虛擬路由轉發)一起工作,vrf是一種ip技術,允許路由表的多個實例同時在同一個路由器上共存。
使用veth可以連接兩個不同的網絡命名空間,使用bridge可以連接多個不同的網絡命名空間。

neutron

作爲一種虛擬網絡服務,爲openstack計算提供網絡連通和尋址服務。
neutron對網絡進行了抽象,如下所示:
openstack學習-網絡管理

neutron支持多種類型的Network,包括local,flat,vlan,vxlan和gre

  • local:與其他網絡和節點隔離,該網絡中的虛擬機只能與位於同一個節點上網絡的虛擬機通信,local網絡主要進行單機測試
  • flat:無vlan標籤的網絡,該網絡中虛擬機能與位於同一網絡的虛擬機通信,並可以跨多個節點
  • vlan:802.1q標籤網絡,就是跟真實vlan使用一致
  • vxlan:基於隧道技術的overlay網絡,主要構建大二層的數據中心網絡
  • gre:使用ip數據包的封裝的隧道技術

subnet

就是子網,每個子網在neutron中需要定義ip地址和範圍
subnet必須與network關聯,可以附加dns,網關ip,靜態路由

port

端口
邏輯網絡交換機上的虛擬交換端口
虛擬機通過port附着到network上
port可以分配ip地址和mac地址

router

連接租戶內同一個network或者不同network之間的子網,以及連接內外網
openstack學習-網絡管理

fixed ip

固定ip,分配到每個端口上的ip,類似於物理環境中配置到網卡上的ip

floating ip

floating ip(浮動ip)是external network創建的一種特殊的port,可以將floating ip綁定到任意network中的port上,底層會進行nat轉發,將發送的浮動ip流量轉發到該port上的對應固定ip上,外界可以通過浮動ip訪問虛擬機,虛擬機也可以通過浮動ip訪問外界
openstack學習-網絡管理

physical network

pytsical network,物理網絡。
在物理網絡環境中連接到openstack不同節點的網絡,每個物理網絡可以支持neutron中的一個或者多個虛擬網絡。
openstack學習-網絡管理
openstack必須通過physical network才能和真實物理網絡通信

provider network

由openstack管理員創建,直接對應數據中心現有物理網絡的一個網段
providr network通常使用vlan或者flat模式,可以在多個租戶之間共享
openstack學習-網絡管理

self-service network

自助服務網絡,也叫租戶網絡或項目網絡,它是由openstack租戶創建的,完全虛擬的,只在本網絡內部連通,不能在租戶之間共享
self-servcie network通常使用vxlan或者gre模式,可以通過virtual router的snat與provider network通信
openstack學習-網絡管理
不同的self-service network中的網段可以相同,類似於物理環境中不同公司的內部網絡
self-service network如果需要和外部網絡通信,需要通過router,類似於物理環境中公司上網需要通過路由器或者防火牆。

External network

外部網絡,也叫公共網絡
它是一種特殊的provider network,連接的物理網絡與數據中心或者internet相通,網絡中的port可以訪問外網
一般將租戶的virtual router連接到該網絡,並創建floating ip綁定虛擬機,實現虛擬機與外網通信
openstack學習-網絡管理
Exernal netwok類似於物理環境中直接使用公網ip網段,不同的是,openstack中external network對應的物理網絡不一定能直連internet,有可能只是數據中心的一個內部私有網絡。

securiy group

openstack學習-網絡管理
安全組,他的作用是在neutron port上的一組策略,規定了虛擬機入口和出口流量的規則
安全組基於linux iptables實現,默認拒絕所有流量,只有添加了放行規則的流量才允許通過
每個openstack項目中都有一個default默認安全組,默認包含如下規則-拒絕所有入口流量,允許所有出口流量

neutron架構與組件

架構圖
openstack學習-網絡管理
neutron架構原則

  • 統一api
  • 核心部分最小化
  • 可插入式的開放架構
  • 可擴展

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的架構是基於插件的,不同的插件提供不同的網絡服務,主要包含如下組件
openstack學習-網絡管理

組件-neutron server

openstack學習-網絡管理
neutron server=apis+plugins,通過這種方式,可以自由對接不同網絡後端能力

組件-core plugin

core plugin,主要是指ml2(modular layer 2) plugin,是一個開放架構,在plugin下,可以集成各個廠家,各種後端技術支持的layer 2網絡服務。
openstack學習-網絡管理
ml2 plugin的drivers主要分爲以下兩種:
typer driver:定義了網絡類型,每種網絡類型對應一個type driver
mechanism driver:對接各種二層網絡技術和物理交換機設備,如ovs,linux bridge等,從typer driver獲取相關的底層網絡信息,確保對應的底層技術能夠根據這些信息正確配置二層網絡。

組件-service plugin

serivce plugin用於實現高階網絡服務,如路由,負載均衡,防火牆和***服務等
openstack學習-網絡管理
l3 service plugin主要提供路由,浮動ip服務等。

組件-agent

neutron agent向虛擬機提供二層和三層的網絡連接,完成虛擬網絡和物理網絡之間的轉換,提供擴展服務等
openstack學習-網絡管理

neutron網絡流量分析

neutron支持多種網絡技術和類型,可以自由組合各種網絡模型。
生產中,openstack主要使用如下兩種網絡模型

  • linux bridge+flat/vlan網絡
    提供簡單網絡互通,虛擬網絡、路由、負載均衡等由物理設備提供,網絡簡單,高效,適合中小企業私有云網絡環境
  • open vswitch+vxlan網絡
    提供多租戶,大規模網絡隔離能力,適合大規模私有云和公有云網絡場景

linux bridge+flat網絡

openstack學習-網絡管理
flat網絡類似於使用網線直接連接物理網絡,openstack不負責網絡隔離
interface 2不帶vlan tag

linux bridge+vlan網絡

openstack學習-網絡管理
interface 2需要多個vlan,連接的物理交換機一般配置trunk模式,並允許這些vlan通過
使用linux bridge+vlan實現 provider network,網絡流量可以分爲如下幾種:
南北向流量:虛擬機和外部網絡通信的流量
東西向流量:虛擬機之間的流量
provider network和外部網絡之間的流量,由物理網絡設備負責交換和路由

使用固定ip的虛擬機南北流量分析

openstack學習-網絡管理
以下涉及計算節點1:

  • 虛擬機(instance)數據包由虛擬網卡(1)通過veth pair轉發到Provider Bridge上的端口(2)
  • 安全組規則(3)檢查防火牆和記錄連接跟蹤
  • vlan子接口(4)將數據包轉發到物理網卡(5)
  • 物理網卡(5)將數據包打上vlan tag101,並將其轉發到物理交換機端口(6)

以下涉及物理網絡設備

  • 交換機從數據包刪除vlan tag 101,並將其轉發到路由器(7)
  • 路由器將數據包從provider network網關(8)路由到external網絡網關(9),並將數據包轉發到external網絡的交換機端口(10)
  • 交換機將數據包轉發到外部網絡(11)
  • 外部網絡(12)接收數據包

同一個網絡中虛擬機東西流量分析

openstack學習-網絡管理
計算節點1:

  • 虛擬機1數據包由虛擬網卡(1)通過veth pair轉發到provider Bridge上端口(2)
  • 安全組(3)檢查防火牆和記錄連接跟蹤
  • vlan子接口(4)將數據包轉發到物理網卡(5)
  • 物理網卡(5)將數據包打上vlan tag 101,並將其轉發到物理交換機端口(6)

物理設備

  • 交換機將數據包轉發給計算節點2連接的交換機端口(7)

計算節點2

  • 計算節點2的物理網卡(8)從數據包刪除vlan tag 101,然後轉發給vlan子接口(9)
  • 安全組(10)檢查防火牆和記錄連接跟蹤
  • 虛擬網卡(11)通過veth pair將數據包轉發給虛擬機2的網卡

不同的網絡中的虛擬機東西流量

openstack學習-網絡管理
計算節點1

  • 虛擬機1由虛擬機網卡(1)通過veth pair轉發到provider bridg上的端口(2)
  • 安全組(3)檢查防火牆和記錄連接跟蹤
  • vlan子接口(4)將數據包轉發到物理網卡(5)
  • 物理網卡(5)將數據包打上vlan tag 101,轉發到物理交換機端口(6)

物理設備

  • 交換機刪除數據包vlan tag 101,並轉發到路由器(7)
  • 路由器將數據包從provider network1網關(8)轉發到provider network2網關(9)
  • 路由器將數據包發送到交換機端口(10)
  • 交換機將數據包打上vlan tag 102,然後轉發給計算節點1連接的端口(11)

以下涉及計算節點1

  • 物理網卡(12)刪除數據包vlan tag 102,然後轉發vlan子接口(13)
  • 安全組(14)檢查防火牆和記錄連接跟蹤
  • 虛擬網卡(15)通過veth pair將數據包轉發給虛擬機2的網卡(16)

open vswitch +vxlan

openstack學習-網絡管理

vxlan是虛擬可擴展的局域網,是一種oeverlay技術,通過三層網絡來搭建虛擬的二層網絡。

使用固定ip的虛擬機南北流量

openstack學習-網絡管理
虛擬機運行在計算節點1上,使用self-service network 1,將數據包發送給internet上的主機
計算節點1

  • 實例接口(1)通過veth將數據包轉發到安全組網橋實例端口(2)
  • 安全組網橋上的安全組(3)處理數據包防火牆和連接跟蹤
  • 安全組網橋OVS端口(4)通過veth將對數據包轉發到OVS集成網橋(br-int)安全組端口(5)
  • OVS集成網橋爲(br-int)數據包添加內部vlan標記
  • OVS集成網橋對內部隧道(br-tun)ID交換內部VLAN標記
  • OVS集成網橋補丁接口(6)將數據包轉發給OVS隧道補丁接口(7)
  • OVS隧道網橋(8)使用vni 101包裹分組
  • 用於覆蓋網絡的底層物理接口(9)經由覆蓋網絡(10)將分組轉發到網絡節點

網絡節點

  • 底層網絡物理接口(11)將分組轉發到OVS隧道橋(12)
  • OVS隧道網橋解包併爲其添加內部隧道ID
  • OVS隧道網橋爲內部VLAN標記交換內部隧道ID
  • OVS隧道橋補丁端口(13)將分組轉發到OVS集成橋接口補丁端口(14)
  • 用於自助服務網絡(15)的OVS集成橋接端口移除內部VLAN標記並將分組轉發到路由器命名空間的自助服務網絡接口(16)
  • 路由器將數據包轉發到提供商網絡的OVS集成橋接端口(18)
  • OVS集成橋將內部VLAN標記添加到數據包
  • OVS集成橋接int-br-provider補丁端口(19)將數據包轉發到OVS提供程序橋接phy-br-provider補丁端口(20)
  • OVS提供程序將內部VLAN標記與實際VLAN標記101交換
  • OVS橋接提供商網絡端口(21)將分組轉發到物理網絡接口(22)
  • 物理網絡接口通過物理網絡設備將數據包轉發到Internet(23)

從外部訪問帶Floating IP的虛擬機

openstack學習-網絡管理

(直接放圖吧。。。。。)
openstack學習-網絡管理

openstack學習-網絡管理

同一個網絡中虛擬機東西流量

openstack學習-網絡管理

openstack學習-網絡管理

openstack學習-網絡管理

不同網絡中虛擬機東西流量

openstack學習-網絡管理

頭大。。頭大。。
網絡看來真的是要學一輩子的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章