OpenStack中SDN泛談2 (OpenContrail&Midonet)

這次介紹的兩個SDN項目,雖然都是開源的,但背后都有一個商業(yè)版在售。

OpenContrail

OpenContrail背后的廠商是Juniper,在ODL創(chuàng)立初期,Juniper也曾經(jīng)是ODL的會員,后來據(jù)說是不滿Cisco把持ODL項目,退出了ODL。

OpenContrail前身是由來自谷歌,Cisco,Juniper的員工在2012年創(chuàng)立的創(chuàng)業(yè)公司Contrail Systems,同一年底Juniper就收購了這家公司,并在第二年將其產(chǎn)品作為自己的SDN產(chǎn)品。

OpenContrail本身是一個開源的SDN,同時Juniper也提供了一個商業(yè)版,兩者提供的代碼和功能是一樣的,區(qū)別是商業(yè)版提供了更好的支持。OpenContrail的定位是支持Cloud Networking和NFV場景,是一個可擴(kuò)展的SDN平臺。

OpenContrail與Neutron的集成之前是作為OpenStackNeutron的一個plugin存在于Neutron代碼中,在Neutron ML2重構(gòu)之后,這部分代碼被從Neutron中移除?,F(xiàn)在是由Juniper在管理這部分代碼。

OpenContrail有兩大構(gòu)成部分,Controller和vRouter。Controller是一個邏輯集中,但是物理上分散的SDN控制器。vRouter是一個轉(zhuǎn)發(fā)平面的實現(xiàn),它運(yùn)行在計算節(jié)點上,為虛擬網(wǎng)絡(luò)提供路由和轉(zhuǎn)發(fā)功能。vRouter與OpenvSwitch很像,但是提供網(wǎng)絡(luò)層和其他服務(wù),也因此叫做vRouter(而不是vSwitch)。Controller對vRouter提供邏輯集中的管控。

OpenContrail Controller

這是一個邏輯集中的控制器。由三部分構(gòu)成:

Configuration nodes:提供REST api,將北向(northbound)數(shù)據(jù)模型轉(zhuǎn)換成南向(southbound)數(shù)據(jù)模型,并存儲在Cassandra數(shù)據(jù)庫。Cassandra是一個高速的NoSQL數(shù)據(jù)庫。

Control nodes:實現(xiàn)了邏輯上集中的控制平面。Control nodes將southbound數(shù)據(jù)模型發(fā)送到各個vRouter或者物理網(wǎng)絡(luò)設(shè)備,并從這些節(jié)點收集數(shù)據(jù)。

Analytics nodes:將vRouter和物理網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)轉(zhuǎn)換成northbound應(yīng)用可以直接使用的數(shù)據(jù)。

這三類nodes都可以以active active的模式存在,這樣既實現(xiàn)了HA,也方便水平擴(kuò)展。

vRouter/Compute nodes

運(yùn)行在計算節(jié)點(Compute nodes)上的轉(zhuǎn)發(fā)平面。OpenContrail沒有用OpenvSwitch,自己實現(xiàn)了一套轉(zhuǎn)發(fā)平面。vRouter又可以分成兩個部分。

vRouter agent:運(yùn)行在Linux中的進(jìn)程。它的作用是:向上連接Control nodes和Analytic nodes,接收和上報數(shù)據(jù);向下連接實際的轉(zhuǎn)發(fā)層面(vRouter Forwarding Plane),下發(fā)和查詢數(shù)據(jù);為網(wǎng)絡(luò)流量的首包下發(fā)轉(zhuǎn)發(fā)策略,也就是在轉(zhuǎn)發(fā)平面下發(fā)流表;代理DHCP, ARP, DNS, and MDNS等協(xié)議。出于HA的考慮,每個vRouter agent都至少連接兩個Control nodes。

vRouter Forwarding Plane:這是一個Linux系統(tǒng)中的內(nèi)核模塊。它的作用是:overlay 網(wǎng)絡(luò)的封包解包;將虛機(jī)和虛擬網(wǎng)卡綁定起來;完成數(shù)據(jù)轉(zhuǎn)發(fā),可以是三層IP轉(zhuǎn)發(fā)也可以是二層MAC轉(zhuǎn)發(fā);匹配現(xiàn)有流表,并應(yīng)用相應(yīng)的action;如果本地沒有匹配的流表,將數(shù)據(jù)包上送到vRouter agent,由vRouter計算流表并下發(fā);對特定的協(xié)議(DHCP, ARP, DNS, and MDNS)數(shù)據(jù)包,上送到vRouter agent做代理。

Routing Instance

這是個分布式轉(zhuǎn)發(fā)平面的概念,Routing Instance在vRouter Forwarding Plane中,Routing Instance與tenant對應(yīng),只有當(dāng)前計算節(jié)點有租戶的虛機(jī)時,才會在當(dāng)前的vRouter Forwarding Plane中創(chuàng)建Routing Instance。

按照這種設(shè)計,就算集群規(guī)模變大,每個計算節(jié)點只需要關(guān)心有限的租戶信息,這種設(shè)計有利于OpenContrail在大規(guī)模環(huán)境下部署。

Gateway nodes

用來連接物理網(wǎng)絡(luò)和虛擬網(wǎng)絡(luò)的節(jié)點。

Service nodes

用來提供網(wǎng)絡(luò)服務(wù)的物理網(wǎng)絡(luò)單元,網(wǎng)絡(luò)服務(wù)包括DPI(Deep Packet Inspection),IDP(Intrusion Detection),IPS(Intrusion Prevention),load balancer 等。Service nodes用在service chain,而service chain可以包含基于虛機(jī)的網(wǎng)絡(luò)服務(wù),也可以包含基于service nodes的網(wǎng)絡(luò)服務(wù)。

一個包含了所有OpenContrail節(jié)點的架構(gòu)如下圖所示:

OpenContrail的架構(gòu)在設(shè)計的時候參考了MPLS VPN的架構(gòu),組件和節(jié)點之間通訊的協(xié)議與MPLS VPN也很像。這有兩點好處:

MPLS VPN是一個成熟的技術(shù),并且已經(jīng)應(yīng)用在大規(guī)模環(huán)境下,采用類似的架構(gòu)可以使得OpenContrail從架構(gòu)上勝任大規(guī)模環(huán)境

另一方面MPLS VPN廣泛部署在現(xiàn)有設(shè)備上,采用類似MPLS VPN的架構(gòu)可以使得OpenContrail能較為容易的接入現(xiàn)有的設(shè)備。

總結(jié)

OpenContrail號稱能支持大規(guī)模部署,經(jīng)過這幾年的開發(fā)已經(jīng)較為成熟,從架構(gòu)設(shè)計上看也比較完善,支持的場景也比較多。并且,OpenContrail最近得到了OpenStack老牌創(chuàng)業(yè)公司Mirantis的背書,同時Mirantis也開始轉(zhuǎn)售Juniper的商業(yè)版Contrail system。去年的時候Mirantis收購了TCP cloud,TCP cloud是一家基于OpenContrail和OpenStack提供服務(wù)的小公司。通過這次收購整合,Mirantis也一定程度掌握了OpenContrail,近期Mirantis宣布OpenContrail將作為Mirantis OpenStack的默認(rèn)構(gòu)成部分,用戶可以選擇是否使用它,同時Mirantis也會提供對OpenContrail的支持。

但是另一方面,雖然OpenContrail是一個開源SDN,但是背后還有一個商業(yè)版的Contrail system。現(xiàn)在網(wǎng)上的安裝部署文檔也不多。個人認(rèn)為開源版的目的是為了推廣商業(yè)版,開源版本的落地還是有一定的難度(如果沒有難度商業(yè)版也就沒有存在的意義了)。

Midonet

Midonet是日本創(chuàng)業(yè)公司Midokura的網(wǎng)絡(luò)虛擬化平臺。Midokura早在2010年就開始做網(wǎng)絡(luò)虛擬化,2014年底的OpenStack峰會上,Midokura將自己的產(chǎn)品Midonet開源出來,并通過networking-midonet項目集成到OpenStack中。Midonet有自己的北向(northbound)接口,提供RESTful API,可以獨(dú)立于OpenStack存在。與OpenContrail類似的是,Midonet也有一個在售的商業(yè)版。除了更好的支持之外,商業(yè)版的Midonet支持VMware平臺,帶有一個集成的UI頁面和更多的管理工具。它們的對比如下圖所示:

來看看Midonet的架構(gòu)吧。

從圖中可以看出,Midonet的架構(gòu)主要由三部分構(gòu)成:

Network State Database

與前面介紹的ODL和OpenContrail不同的是,Midonet不再有邏輯集中的SDN controller,Midonet的邏輯中心是NSDB。NSDB北向提供REST api,供OpenStack和其他的Cloud orchestrator對接。南向通過RPC與運(yùn)行在各個節(jié)點的Midonet Agent對接。NSDB的核心是基于Zookeeper + Cassandra。也就是說數(shù)據(jù)存儲在一個高速的NoSQL數(shù)據(jù)庫中。

Midonet Gateway

集群中連接外網(wǎng)的節(jié)點,通過BGP傳播和學(xué)習(xí)路由信息,Midonet的BGP沒有采用OpenStack的方案,而是自己基于quagga實現(xiàn)的。

Provider router

Midonet cluster中通常有一個provider router,這個是OpenStack Neutron沒有的概念。這里的provider router是一個虛擬的概念,所有的tenant router都連接到這個provider router上。在Neutron里,tenant router之間的網(wǎng)絡(luò)通訊,是走到external network,然后由provider(物理)network完成的轉(zhuǎn)發(fā)。而在Midonet中,tenant router之間的網(wǎng)絡(luò)通訊是通過provider router 完成的轉(zhuǎn)發(fā),而不需要走到provider network。

這么做的好處是:tenant router之間的網(wǎng)絡(luò)通訊變得可控了;provider router 管理所有的南北向流量;集中的provider router做為BGP edge router,方便BGP路由的應(yīng)用和管理。

Provider router 的uplink連接的就是Midonet Gateway節(jié)點。通常連接三個。

Midonet Agent

運(yùn)行在計算節(jié)點上,管控著計算節(jié)點上的Cloud networking。Midonet Agent基于OpenvSwitch實現(xiàn),但是只保留了OpenvSwitch的內(nèi)核態(tài)部分,也就是說只保留了OVS datapath。而對應(yīng)的ovs-vswitchd和ovsdb-server部分,都是由Midonet實現(xiàn)的。

Midonet Agent更像是對應(yīng)ovs-vswitchd,OVS datapath不能處理的數(shù)據(jù)包上送到Midonet Agnet,Midonet Agent如果處理不了再通過RPC調(diào)用NSDB進(jìn)行Overlay Topology Simulation。

Overlay Topology Simulation會根據(jù)Midonet掌握的集群網(wǎng)絡(luò)信息進(jìn)行運(yùn)算,得出相應(yīng)的配置和轉(zhuǎn)發(fā)規(guī)則,再下發(fā)到OVS datapath。

Midonet自己有個圖很有意思,描繪了Midonet的整體架構(gòu),包括虛擬和現(xiàn)實的對應(yīng)。

總結(jié)

Midonet是一個商用化的SDN為了OpenStack做的開源,并且Midokura的工程師在OpenStack社區(qū)也很活躍。所以Midonet與OpenStack的集成沒有大問題。其次,不像ODL和ONOS希望做大而全的SDN,Midonet專注于數(shù)據(jù)中心的Cloud networking,項目較為可控,適合大規(guī)模部署。

但是,Midonet本身還是掌握在Midokura公司,開源代碼和商業(yè)版代碼也不是一套,文檔較為落后。而且Mirantis在選擇第三方SDN的時候選擇了OpenContrail而不是Midonet,對Midonet也有一定的沖擊。

大體上來說,背后有商業(yè)版的開源,都不是真正意義的開源,開源只是為了更好的售賣商業(yè)版,畢竟背后的公司要掙錢。本文介紹的兩個SDN都屬于這個情況。

本文轉(zhuǎn)載自:https://zhuanlan.zhihu.com/p/25994267

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容