探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整網路流程 篇
前兩篇博文分別研究了Compute節點和Neutron節點內部的網路架構。本文通過一些典型流程案例來分析具體網路流程過程。
0. 環境
簡單總結一下:
Compute 節點上由Neutron-OVS-Agent負責:
- br-int:每個虛機都通過一個Linux brige連到該OVS橋上
- br-tun:轉化網路packet中的VLAN ID 和 Tunnel ID
- GRE tunnel:虛擬GRE通道
Neutron節點上:
- br-tun/br-int:同Compute節點,由Neutron-OVS-Agent負責
- br-ex:連線物理網絡卡,用於和外網通訊
- Network namespace:用於tenant 網路DHCP服務的qDHCP由Neutron-DHCP-Agent負責,和用於網路間routing的qRouter由Neutron-L3-Agent負責
2. 幾個典型流程案例
2.1 流程1: 同一個host上同一個子網內虛機之間的通訊過程
因為br-int是個虛擬的二層交換機,所以同一個host上的同一個子網內的虛機之間的通訊只是經過 br-int 橋,不需要經過 br-tun 橋。如下圖中紅線所示:
2.2 流程2: 不同主機上同一個子網內的虛機之間的通訊過程
過程:
1. 從左邊的虛機1出發的packet,經過Linux bridge到達br-int,被打上 VLAN ID Tag
2. 到達br-tun,將VLAN ID轉化為Tunnel ID,從GRE Tunnel 發出,到達另一個compute節點
3. 在另一個compute節點上經過相反的過程,到達右邊的虛機
注:本配置待不久之後的實驗驗證。
2.3 流程3: 虛機訪問外網
1. Packet離開虛機,經過Linux bridge, 到達br-int,打上 VLAN ID Tag
2. 達到 br-tun,將 VLAN ID轉化為 Tunnel ID
3. 從物理網絡卡進入GRE通道
4. 從GRE通道達到 Neutron 節點的網絡卡
5. 達到跟物理網絡卡相連的br-tun,將 Tunnel ID 轉化為 VLAN ID
6. 達到 br-int,再達到 router,router的NAT 表 將 fixed IP 地址 轉化為 floatiing IP 地址,再被route 到br-ex
7. 從br-ex相連的物理網絡卡上出去到外網
外網IP訪問虛機是個相反的過程。
2.4 流程4:虛機發送DHCP請求
過程:
1. 虛機的packet -> br-int -> br-tun -> GRE Tunnel -> eth2 ------>eth2->br-tun->br-int->qDHCP
2. qDHCP返回其fixed IP地址,原路返回
例如:在虛機(IP為10.0.22.202)啟動過程中,DHCP Server (10.0.22.201)所收到的請求及其回覆:
[email protected]:/home/s1# ip netns exec qdhcp-d24963da-5221-481e-adf5-fe033d6e0b4e tcpdump listening on tap15865c29-9b, link-type EN10MB (Ethernet), capture size 65535 bytes //dnsmasq在此TAP裝置上監聽
07:16:56.686349 IP (tos 0x0, ttl 64, id 41569, offset 0, flags [DF], proto UDP (17), length 287)
10.0.22.202.bootpc > 10.0.22.201.bootps: [udp sum ok] BOOTP/DHCP, Request from fa:16:3e:19:65:62 (oui Unknown), length 259, xid 0xab1b9011, secs 118, Flags [none] (0x0000)
Client-IP 10.0.22.202 //虛機eth0的IP地址
Client-Ethernet-Address fa:16:3e:19:65:62 (oui Unknown)
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Release
Client-ID Option 61, length 7: ether fa:16:3e:19:65:62 //虛機eth0的Mac地址
Server-ID Option 54, length 4: 10.0.22.201 //DHCP Server IP地址
2.5 不同tenant內虛機之間的通訊
Neutron Tenant網路是為tenant中的虛機之間的通訊。如果需要不同tenant內的虛機之間通訊,需要在兩個subnet之間增加Neutron路由。
3. 關於GRE/OVS/Neutron的一些快速結論
1. GRE 可以隔離廣播風暴,不需要交換機配置chunk口, 解決了vlan id個數限制,3層隧道技術可以實現跨機房部署,但它是點對點技術,每兩個點之間都需要有一個隧道,對於4層的埠資源是一種浪費;同時,在IP頭中增加Tunnel ID,勢必減少vm的mtu值,同樣大小的資料,需要更多的ip包來傳,傳輸效率有影響。 2. OVS:可以針對每個vm做流量限制、流量監控、資料包分析,同時可以引入OpenFlow,使控制邏輯和物理交換相分離,並且sdn controller可以實現vxlan的跨機房大二層通訊,但是可能效能是個潛在問題。 3. Neutron的優點: (1)提供REST API (2)Neutron 把部分傳統網路管理的功能推到了租戶方,租戶通過它可以建立一個自己專屬的虛擬網路及其子網,建立路由器等,在虛擬網路功能的幫助下,基礎物理網路就可以向外提供額外的網路服務了,比如租戶完全可以建立一個屬於自己的類似於資料中心網路的虛擬網路。Neutron 提供了比較完善的多租戶環境下的虛擬網路模型以及 API。像部署物理網路一樣,使用 Neutron 建立虛擬網路時也需要做一些基本的規劃和設計。 4. Neutron的可能問題: (1)單點故障:Neutron節點做為network的中心控制節點,很容易導致單點故障。生產環境中HA應該是必須有的。 (2)效能降低:network traffic經過太多的層次,latency增加。 (3)可擴充套件性不夠:當Compute 節點快速增加的時候,Neutron節點也需要擴充套件。相關推薦
探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整網路流程 篇
前兩篇博文分別研究了Compute節點和Neutron節點內部的網路架構。本文通過一些典型流程案例來分析具體網路流程過程。 0. 環境 簡單總結一下: Compute 節點上由Neutron-OVS-Agent負責: br-int:每個虛機都通過一個Linux brige連到該OVS橋上
探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron節點篇
0. 測試環境 OpenStack配置: tenant:三個tenant:demo,tenant-one,tenant-two network:三個tenanet公用public network,每個tenant擁有自己的subnet,都有一個router連線自己的subnet到public n
學習OpenStack之(6):Neutron 深入學習之 OVS + GRE 之 Compute node 篇
0.環境 OpenStack網路配置:一個tenant, 2個虛機 Type driver: GRE, Mechanism driver: OVS 一個public network: ext-net 和相應的subnet ext-subnet 一個VM network:demo-net 和相應
理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虛擬路由冗餘協議(VRRP)
本系列會分析OpenStack 的高可用性(HA)概念和解決方案: 1. 基礎知識 1.1 虛擬路由冗餘協議 - VRRP 1.1.1 概念 路由器是整個網路的核心。一個網路內的所有主機往往都設定一條預設路由,這樣,主機發出的目的地址不在本網段的報文將被通過預設路由
iptables詳解(8):iptables擴展模塊之state擴展
什麽是 80端口 圖片 先來 為我 表示 本機 發送數據 original 當我們通過http的url訪問某個網站的網頁時,客戶端向服務端的80端口發起請求,服務端再通過80端口響應我們的請求,於是,作為客戶端,我們似乎應該理所應當的放行80端口,以便服務端回應我們的報文可
理解Docker(8):Docker 儲存之卷(Volume) (轉)
1. Docker volume 的幾種形態 有狀態容器都有資料持久化需求。前一篇文章中提到過,Docker 採用 AFUS 分層檔案系統時,檔案系統的改動都是發生在最上面的容器層。在容器的生命週期內,它是持續的,包括容器在被
ApolloStudio高手之路(8):用Python呼叫.Net(C#、VB.Net等)開發的動態連結庫(DLL庫檔案)實現相互協作
ApolloStudio是基於.Net與Python雙架構下的實現,這樣的架構體系使得其具有傳統定製軟體無法比擬的超強拓展性,在本文中我們將介紹這兩者是如何在ApolloStudio平臺上實現優勢互補的。由於在ApolloStudio中使用的更易學習的Python作為主導指令碼語言,這裡我們將介
HTML5邊玩邊學(8):俄羅斯方塊就是這麼簡單 之 資料模型篇
特別提示: 本文中的執行效果需要Chrome瀏覽器或者Firefox瀏覽器。 一、從資料出發還是從介面出發 要寫一個俄羅斯方塊小遊戲,我們先來一塊考慮一下下面幾個問題: 1、用什麼表示方塊 2、怎麼設定或者改變方塊的顏色 3、怎麼移動方塊 4、怎麼消除方塊 請考慮一分
理解 OpenStack 高可用(HA)(3):Neutron 分散式虛擬路由(Neutron Distributed Virtual Routing)
本系列會分析OpenStack 的高可用性(HA)概念和解決方案: Neutron 作為 OpenStack 一個基礎性關鍵服務,高可用性(HA)和擴充套件性是它的基本需求之一。對 neutron server 來說,因為它是無狀態的,我們可以使用負載均衡器(Load B
學習OpenStack之(5):在Mac上部署Juno版本OpenStack 四節點環境
0. 前沿 經過一段時間的折騰,終於在自己的Mac上裝好了Juno版本的四節點環境。這過程中,花了大量的時間,碰到了許多問題,學到不少知識,折騰過不少其實不需要折騰的東西,本文試著來對這過程做個總結。 1. 初始環境 說明: 安裝的是14.04 server 版本,裝好後: (1)修改
es6學習之路(8):物件的擴充套件
1.屬性的簡潔表示法 vvar target = { a: 1 }; var source1 = { b: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2); target // {
物聯網平臺構架系列 (四):Amazon, Microsoft, IBM IoT 平臺導論 之 平臺
物聯網; iot; aws; 亞馬遜; greengrass;microsoft; azure;ibm; watson; bluemix最近研究了一些物聯網平臺技術資料,以做選型參考。腦子裏積累大量信息,便想寫出來做一些普及。作為科普文章,力爭通俗易懂,不確保概念嚴謹性。我會給考據癖者提供相關英文鏈接,以便深
Swift學習筆記(8):枚舉
check oss 函數 not 條形碼 blog 出現 現在 pan 目錄: 基本語法 關聯值 原始值 枚舉為一組相關的值定義了一個共同的類型。 ?可以給枚舉成員指定原始值類型:字符串,字符,整型值或浮點數等 ?枚舉成員可以指定任意類型的關聯值存儲
springCloud(8):Ribbon實現客戶端側負載均衡-自定義Ribbon配置
spring cloud ribbon 自定義ribbon配置 一、簡介很多場景下,可能根據需要自定義的Ribbon的配置,例如修改Ribbon的負載均衡規則等。Spring cloud Camden允許使用Java代碼或屬性自定義Ribbon的配置。二、使用Java代碼自定義Ribbon配置在S
EasyPR源碼剖析(8):字符分割
resize border 特殊 opened sta sea adapt warp urn 通過前面的學習,我們已經可以從圖像中定位出車牌區域,並且通過SVM模型刪除“虛假”車牌,下面我們需要對車牌檢測步驟中獲取到的車牌圖像,進行光學字符識別(OCR),在進行光學字符識別
Linux kernel中斷子系統之(五):驅動申請中斷API
思路 esc 設計師 數組 還需 申請 進一步 time num 一、前言本文主要的議題是作為一個普通的驅動工程師,在撰寫自己負責的驅動的時候,如何向Linux Kernel中的中斷子系統註冊中斷處理函數?為了理解註冊中斷的接口,必須了解一些中斷線程化(threaded i
Linux kernel的中斷子系統之(一):綜述
lock www. api cdc 電平 還需 結構 現在 ces 一、前言一個合格的linux驅動工程師需要對kernel中的中斷子系統有深刻的理解,只有這樣,在寫具體driver的時候才能:1、正確的使用linux kernel提供的的API,例如最著名的request
《Linux學習並不難》文件系統管理(8):設置開機自動掛載Linux文件系統
Linux 掛載 文件系統 xfs 18.8 《Linux學習並不難》文件系統管理(8):設置開機自動掛載Linux文件系統只有將某個分區或是設備進行掛載以後才能使用,但是當計算機重新啟動以後,又需要重新掛載,這個時候可以通過修改/etc/fstab文件實現開機自動掛載Linux文件系統。要
基於Ubuntu Server 16.04 LTS版本安裝和部署Django之(四):安裝MySQL數據庫
ins cli 遠程訪問 lib root 版本 連接 str ibm 1.安裝mysql以及插件: sudo apt-get install mysql-server mysql-client sudo apt-get install libmysqld-devsud
《Linux學習並不難》Linux字符界面(2):關閉和重啟Linux系統之shutdown命令
Linux shutdown 關機 3.2 《Linux學習並不難》Linux字符界面(2):關閉和重啟Linux系統之shutdown命令shutdown命令可以安全地關閉或重啟Linux系統,有些用戶會使用直接斷掉電源的方式來關閉計算機,這是十分危險的。Linux系統與Windows不同,其