OpenStack中SDN泛談2 (OpenContrail&Midonet)
這次介紹的兩個SDN項目,雖然都是開源的,但背後都有一個商業版在售。
OpenContrail
OpenContrail背後的廠商是Juniper,在ODL創立初期,Juniper也曾經是ODL的會員,後來據說是不滿Cisco把持ODL項目,退出了ODL。
OpenContrail前身是由來自谷歌,Cisco,Juniper的員工在2012年創立的創業公司ContrailnSystems,同一年底Juniper就收購了這家公司,並在第二年將其產品作為自己的SDN產品。
OpenContrail本身是一個開源的SDN,同時Juniper也提供了一個商業版,兩者提供的代碼和功能是一樣的,區別是商業版提供了更好的支持。OpenContrail的定位是支持CloudnNetworking和NFV場景,是一個可擴展的SDN平台。
OpenContrail與Neutron的集成之前是作為OpenStacknNeutron的一個plugin存在於Neutron代碼中,在Neutron ML2重構之後,這部分代碼被從Neutron中移除。現在是由Juniper在管理這部分代碼。
nnnnnnnnnnnnnnnOpenContrail有兩大構成部分,Controller和vRouter。Controller是一個邏輯集中,但是物理上分散的SDN控制器。vRouter是一個轉發平面的實現,它運行在計算節點上,為虛擬網路提供路由和轉發功能。vRouter與OpenvSwitch很像,但是提供網路層和其他服務,也因此叫做vRouter(而不是vSwitch)。Controller對vRouter提供邏輯集中的管控。
OpenContrail Controller
這是一個邏輯集中的控制器。由三部分構成:
- Configuration nodes:提供REST api,將北向(northbound)數據模型轉換成南向(southbound)數據模型,並存儲在Cassandra資料庫。Cassandra是一個高速的NoSQL資料庫。
- Control nodes:實現了邏輯上集中的控制平面。Control nodes將southbound數據模型發送到各個vRouter或者物理網路設備,並從這些節點收集數據。
- Analytics nodes:將vRouter和物理網路設備的數據轉換成northbound應用可以直接使用的數據。
這三類nodes都可以以active active的模式存在,這樣既實現了HA,也方便水平擴展。
vRouter/Compute nodes
運行在計算節點(Computennodes)上的轉發平面。OpenContrail沒有用OpenvSwitch,自己實現了一套轉發平面。vRouter又可以分成兩個部分。
- vRouter agent:運行在Linux中的進程。它的作用是:向上連接Control nodes和Analyticnnodes,接收和上報數據;向下連接實際的轉發層面(vRouter Forwarding Plane),下發和查詢數據;為網路流量的首包下發轉發策略,也就是在轉發平面下發流表;代理DHCP, ARP, DNS, and MDNS等協議。出於HA的考慮,每個vRouternagent都至少連接兩個Controlnnodes。
- vRouter Forwarding Plane:這是一個Linux系統中的內核模塊。它的作用是:overlay 網路的封包解包;將虛機和虛擬網卡綁定起來;完成數據轉發,可以是三層IP轉發也可以是二層MAC轉發;匹配現有流表,並應用相應的action;如果本地沒有匹配的流表,將數據包上送到vRouter agent,由vRouter計算流表並下發;對特定的協議(DHCP, ARP, DNS, andnMDNS)數據包,上送到vRouter agent做代理。
Routing Instance
這是個分散式轉發平面的概念,RoutingnInstance在vRouternForwarding Plane中,RoutingnInstance與tenant對應,只有當前計算節點有租戶的虛機時,才會在當前的vRouter Forwarding Plane中創建Routing Instance。
按照這種設計,就算集群規模變大,每個計算節點只需要關心有限的租戶信息,這種設計有利於OpenContrail在大規模環境下部署。
Gateway nodes
用來連接物理網路和虛擬網路的節點。
Service nodes
nnnnnnnnnnnnnnnnnnnnnnn用來提供網路服務的物理網路單元,網路服務包括DPI(Deep PacketnInspection),IDP(Intrusion Detection),IPS(Intrusion Prevention),load balancer 等。Service nodes用在service chain,而service chain可以包含基於虛機的網路服務,也可以包含基於service nodes的網路服務。
一個包含了所有OpenContrail節點的架構如下圖所示:
- MPLS VPN是一個成熟的技術,並且已經應用在大規模環境下,採用類似的架構可以使得OpenContrail從架構上勝任大規模環境
- 另一方面MPLS VPN廣泛部署在現有設備上,採用類似MPLS VPN的架構可以使得OpenContrail能較為容易的接入現有的設備。
總結
OpenContrail號稱能支持大規模部署,經過這幾年的開發已經較為成熟,從架構設計上看也比較完善,支持的場景也比較多。並且,OpenContrail最近得到了OpenStack老牌創業公司Mirantis的背書,同時Mirantis也開始轉售Juniper的商業版Contrailnsystem。去年的時候Mirantis收購了TCP cloud,TCP cloud是一家基於OpenContrail和OpenStack提供服務的小公司。通過這次收購整合,Mirantis也一定程度掌握了OpenContrail,近期Mirantis宣布OpenContrail將作為Mirantis OpenStack的默認構成部分,用戶可以選擇是否使用它,同時Mirantis也會提供對OpenContrail的支持。
但是另一方面,雖然OpenContrail是一個開源SDN,但是背後還有一個商業版的Contrailnsystem。現在網上的安裝部署文檔也不多。個人認為開源版的目的是為了推廣商業版,開源版本的落地還是有一定的難度(如果沒有難度商業版也就沒有存在的意義了)。
Midonet
Midonet是日本創業公司Midokura的網路虛擬化平台。Midokura早在2010年就開始做網路虛擬化,2014年底的OpenStack峰會上,Midokura將自己的產品Midonet開源出來,並通過networking-midonet項目集成到OpenStack中。Midonet有自己的北向(northbound)介面,提供RESTfulnAPI,可以獨立於OpenStack存在。與OpenContrail類似的是,Midonet也有一個在售的商業版。除了更好的支持之外,商業版的Midonet支持VMware平台,帶有一個集成的UI頁面和更多的管理工具。它們的對比如下圖所示:
來看看Midonet的架構吧。NetworknState Database
與前面介紹的ODL和OpenContrail不同的是,Midonet不再有邏輯集中的SDN controller,Midonet的邏輯中心是NSDB。NSDB北向提供REST api,供OpenStack和其他的Cloud orchestrator對接。南向通過RPC與運行在各個節點的MidonetnAgent對接。NSDB的核心是基於Zookeeper + Cassandra。也就是說數據存儲在一個高速的NoSQL資料庫中。
Midonet Gateway
nnnnnnnnnnnnnnnnnnn集群中連接外網的節點,通過BGP傳播和學習路由信息,Midonet的BGP沒有採用OpenStack的方案,而是自己基於quagga實現的。
Provider router
Midonet cluster中通常有一個provider router,這個是OpenStacknNeutron沒有的概念。這裡的providernrouter是一個虛擬的概念,所有的tenantnrouter都連接到這個providernrouter上。在Neutron里,tenant router之間的網路通訊,是走到externalnnetwork,然後由provider(物理)network完成的轉發。而在Midonet中,tenant router之間的網路通訊是通過providernrouter 完成的轉發,而不需要走到provider network。
nnnnnnnnnnnnnnn這麼做的好處是:tenant router之間的網路通訊變得可控了;provider router 管理所有的南北向流量;集中的provider router做為BGP edge router,方便BGP路由的應用和管理。Provider router 的uplink連接的就是Midonet Gateway節點。通常連接三個。
Midonet Agent
運行在計算節點上,管控著計算節點上的Cloud networking。Midonet Agent基於OpenvSwitch實現,但是只保留了OpenvSwitch的內核態部分,也就是說只保留了OVS datapath。而對應的ovs-vswitchd和ovsdb-server部分,都是由Midonet實現的。n
Midonet Agent更像是對應ovs-vswitchd,OVS datapath不能處理的數據包上送到Midonet Agnet,Midonet Agent如果處理不了再通過RPC調用NSDB進行Overlay Topology Simulation。
Overlay Topology Simulation會根據Midonet掌握的集群網路信息進行運算,得出相應的配置和轉發規則,再下發到OVS datapath。
Midonet自己有個圖很有意思,描繪了Midonet的整體架構,包括虛擬和現實的對應。總結
Midonet是一個商用化的SDN為了OpenStack做的開源,並且Midokura的工程師在OpenStack社區也很活躍。所以Midonet與OpenStack的集成沒有大問題。其次,不像ODL和ONOS希望做大而全的SDN,Midonet專註於數據中心的Cloud networking,項目較為可控,適合大規模部署。
但是,Midonet本身還是掌握在Midokura公司,開源代碼和商業版代碼也不是一套,文檔較為落後。而且Mirantis在選擇第三方SDN的時候選擇了OpenContrail而不是Midonet,對Midonet也有一定的衝擊。
nnnnnn大體上來說,背後有商業版的開源,都不是真正意義的開源,開源只是為了更好的售賣商業版,畢竟背後的公司要掙錢。本文介紹的兩個SDN都屬於這個情況。
推薦閱讀:
※SDN能在伺服器的負載均衡上起作用嗎?
※SDN的控制器應該放在什麼位置(距離交換器的距離)?
※OpenStack中SDN泛談4 (SDN發展與架構)