陳海泉:SDN/NFV 2.0 架構的網路技術實踐

arron劉發表於2016-01-18

分享人: 陳海泉,青雲QingCloud 系統工程師

大家好,我是 QingCloud 的工程師陳海泉,今天給大家分享一些 SDN/NFV 2.0 架構的網路技術。

首先,說一下什麼是 SDN,SDN 就是軟體定義網路。當然也不是所有網路定製一定要軟體來實現,因為有很多硬體方案也可以做到 SDN 的效果。

青雲QingCloud 用軟體定義來實現虛擬網路,我們 2013 年的時候,在公有云上線了第一代產品。當時 SDN 還是一個比較新鮮的事情,使用者用的還比較少,隨著使用者量越來越大,私有網路裡面的 VM 數量超過一定的數量級的時候,我們發現效能就有一個比較大的損失,已經無法滿足使用者的需求。所以我們在去年下半年的時候,花了很大功夫去做 SDN/NFV 2.0 的事情。

VPC 是什麼意思呢?VPC 網路是 QingCloud 環境內可以為使用者預配置出的一個專屬的大型網路。在 VPC 網路內,使用者可以自定義 IP 地址範圍、建立子網,並在子網內建立主機/資料庫/大資料等各種雲資源。

正是因為雲端計算需要虛擬網路,也需要 VPC 。所以我們還需要定義一個 SDN 方案解決這兩個需求,現有的 SDN 方案主要分成兩個方向:

  • 一是用軟體來定義,但是用硬體來實現。比如某些帶 SDN 功能的交換機,把它採購進來,部署到產品裡,用硬體廠商提供的 API ,在上面提供 SDN 功能。

  • 二是NFV ,就是網路功能虛擬化,用軟體的方式來實現,用軟體的交換機和路由器,把他們組織起來成為一個軟體實現的 SDN 。其代表有 VMware NSX、Juniper OpenContrail 等等。

QingCloud 在 SDN 方案的選型上也做過討論,用軟體還是用硬體方案?其中考慮的問題主要是以下三個方面:

  • 第一,成本。在公有云上面大家拼的是成本,誰的硬體成本低,誰就能把價格降到最低。如果我們採用現有的硬體方案,在網路裝置上面增加了很多投資,並且我要採購的不是一個或者兩個,而是一批。
  • 第二,裝置依賴。我們的私有云賣的是軟體,客戶可以按照偏好選擇自己的硬體,假如QingCloud 的 SDN 繫結了某款硬體產品,那我們在面對使用者的時候,可能連招標的機會都沒有,因為人家壓根就沒有辦法用你的硬體。
  • 第三,情懷。對於工程師來說,大家都想把產品做得更優秀。其實,軟體跟傳統快遞行業非常的接近,為什麼這麼說。因為網路中的交換機、路由器,其實跟快遞行業裡的快遞員和包裹集散中心非常相似,一般包裹給快遞員以後,快遞員會發給一個快遞集散中心,這裡可以查詢包裹應該被送到哪個地方,然後再將包裹交給快遞員,送到使用者那裡。順豐在中國應該是最好的快遞公司之一,因為它把轉運環節都做全了,只有方方面面都能夠控制才能實現壓倒性的優勢。因此,我們如果把資料包轉發的每個流程都控制到,就有可能在系統上面做到最優,採用硬體裝置使用這些功能的話,最後帶來的是同質化,跟競爭對手相比不會有任何的優勢。

綜合以上三方面的原因,我們決定開發一套新的SDN/NFV 2.0 方案,取代 1.0 。

既然定了要自己做一套新的方案,怎麼去實現?我們做了一些總結,新的產品需要滿足傳統 SDN 的需求。**第一,資料封裝。**也就是實現一個基本的虛擬網路;**第二,實現控制平面。**二層、三層的網路資料進行路由規則的同步,然後下發到虛擬的交換機和路由器裡面去,控制做到 ARP 泛洪抑制;**第三,實現資料平面。**除了 DVR 之外,還提供了虛擬邊界路由器。

除此之外,還需要增加我們需要的 2.0 方面的功能。

  • 第一,VPC 主機直接繫結公網 IP 。私有云使用者大量依賴基礎網路,要求 VM 直接繫結公網 IP ;
  • 第二,負載均衡器。可對進入流量進行分流,出流量經由多臺 Virtual Gateway (虛擬閘道器)分擔負載,單 IP 可承載 1 TB 出流量。同時,4—7層完全透明;
  • 第三,IP 不變。支援可以無限水平擴充套件的基礎網路,並保持高可用及高效能,VM 任意遷移,IP 地址保持不變;
  • 第四, VPC 和物理網路連線。

下面分別解釋剛才說的那幾個基礎實現。

首先解釋虛擬網路。在一些大公司裡會提供一種叫內部郵遞的服務。公司員工之間可以傳送一種快遞,比如要給財務部門某同事發一個報價單,會查他的工位,知道他坐在哪,比如 184-323-534 。然後準備一個大信封,把要填的單子放在裡面。我不需要知道這個人是在北京,還是在上海,我把這個信封交給公司的收發室,這個收發室會對這個信封進行重新封裝,因為他有此員工的具體地址,然後把具有新地址的信封交給外包快遞公司。放到雲端計算裡,這就是一個虛擬網路。可以允許使用者自己定義一個地址,然後進行傳輸,為了讓它在三層網路裡傳輸,可以再進行封裝,再套一個包,寫上新的地址。根據外包的內容和裡層包的內容把這個資料包傳送到對應的資訊那裡。

虛擬網路依賴於拆包、分包。現在採用的方案主要是比較流行的 VXLAN,因為 VXLAN 有一系列的優勢。第一,隧道連線一組物理機,由於 VXLAN 的資料包在整個轉發過程中保持了內部資料的完整,因此 VXLAN 的資料平面是一個基於隧道的資料平面;第二,使用 UPD 協議,當資料包交給網路卡的時候,網路卡根據這個資料的包頭,用不同的網路卡佇列。這樣把包交給不同的CPU處理,提升效能;第三, 是比較有爭議的 Flood & Learn 自動管理虛擬網路,VXLAN 可以進行泛洪學習,當 VTEP 收到一個 UDP 資料包後,會檢查自己是否收到過這個虛擬機器的資料,避免組播學習。

透過以上幾點,我們覺得 VXLAN 不錯,但是仔細的去想,就發現它有兩個非常大的不足。一個是組播協議,大規模部署會受硬體裝置組播路由限制;第二,泛洪學習的機制,會把原來在二層廣播的 ARP 包擴大到三層網路,這樣隨著規模擴大,廣播越來越多,會嚴重的浪費頻寬資源。所以,我們既要使用 VXLAN ,又要消滅它的不足,所以我們設定了 SDN 控制器,透過我們自己設定的規則,取代它自有的泛洪學習規則。

那麼這個控制器需要多少個呢?我之前曾經瞭解過一些使用者生產環境裡用到的控制器,通常只有一個。它負責整個叢集中所有節點的規則,這麼做造成一個問題,當叢集建立、銷燬、遷移的時候,需要把規則同步到整個叢集所有的節點中,這樣隨著使用者秒級建立資源的需求,同步規則的流量就會相當相當大。所以我們做了一個分散式控制器,不僅把控制器分佈到 VPC ,還分佈到虛擬網路裡頭。每個 VPC 有 253 個虛擬網路。

剛才說了虛擬網路和控制器,第三點 SDN 需要做的就是控制資料平面,其作用就是把資料包真的從一個地方複製到另外一個地方。傳統的資料平面,比如 OpenStack 通常會用 OVS ,OVS 會有一個問題,它會把資料交給另外一個程式,這樣會帶來一個效能的下降,而我們的方案完全改變了這個問題,自己做了一些 Kernel 的改動,將轉發放到 Linux Kernel 上,而且我們是用 NFV 來實現的。

同時我們引入了一個新的功能叫做 DVR (分散式虛擬路由器)。透過上面的圖解釋一下我們為什麼需要DVR。左邊是這張是物理拓撲圖,物理世界中 A 和 B 通訊,需要把資訊傳送到 A 的交換機,然後到路由器,然後路由器轉給 B 的交換機,B 的交換機再傳送給 B ,A 和 B 通常需要 4 跳才能發一個資料包。

我們 1.0 的時候,也是用 NFV 實現的 SDN ,我們會模仿物理世界,虛擬出虛擬的路由器和交換機提供給使用者。如果 A、B、C、D、E 這五個裝置分別位於五個不同的虛擬機器上,在邏輯上 A 的包經過C、E、D、B 才能到,邏輯上是四跳。但是虛擬裝置每一跳都要透過物理裝置去交換,而物理裝置每一條四跳,這樣總得轉發量實際上需要 16 跳。這也就是為什麼 1.0 的效能總是上不去。為了解決這個問題,我們引入了 DVR ,從 A 到 B 還是這樣,兩個 DVR 之間直接交換一下資料就可以了,因為在邏輯上有一跳,所以總數跟原來物理裝置一樣,四跳完成一個資料包的轉換,這樣效能就可以非常接近物理機的效能,從而可以組成一個大的虛擬網路。

QingCloud 的 DVR 除了實現 VPC 簡單的功能之外,它實際上是一個複雜的東西。因為除了保持自己跟自己的虛擬網路,還需要有其他四個方向:第一個就是閘道器需求,我們需要提高公網 IP 儲存量,希望 DVR 把包發到公網閘道器;第二是 VPC 的虛擬機器要能跟硬體裝置進行高度的互訪。因為我們私有云使用者的機房裡,不止有 QingCloud 的東西,還有 Oracle 的資料庫、F5 的路由器等等,假如我們讓使用者把這些業務放到虛擬網路裡,虛擬網路就要跟硬體網路進行高速的互訪。第三是VPC,可以讓使用者定義 255 個 C 段,加起來可以有 60000 多個虛擬機器。第四是,我們還提供了一個邊界路由器,可以讓使用者虛擬資源跟遠端的 IDC 之間做一個互通。最後一個就是一個負載均衡器叢集,我們的 DVR 就是一個平臺,讓使用者的主機和負載均衡器直接相連。

我們做的最後一個功能就是負載均衡器叢集。設計是這樣,我們有一個閘道器叢集連著因特網。比如我有一個 IP 1.1 ,實際上是繫結在 VG 1 這裡,VG 1 會做第一次的流量轉發,會把流量按照使用者定義的負載均衡器節點數量轉發到自己私有的負載均衡器節點裡(1、2、3),它的特點就是,返回流量不需要經過進來的這個閘道器,而是經過自己對應的不同物理閘道器傳送到因特網。因為當 VG 1 能力受到限制的時候,假如我們所有流量都從它回去的時候,它自己的網路頻寬實際上就是整個叢集的能力。而我們把它分散之後,就可以做到,出去的流量幾乎是沒有限制。只要我們的 VG 裝置有多少,它的頻寬就會有多少,因為流量不需要從預設的線路回去。同時隨著使用者擴充負載均衡器節點的數量,也擴充套件了 HTTPS 的解除安裝能力,並且我們做到了 4 層/ 7 層的完全透明,也就是說使用者透過因特網訪問到他們業務的時候,我們在所有轉發過程中,都會保留其原地址,使用者這邊得到的包是直接來自因特網使用者的 IP 地址。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26916835/viewspace-1978228/,如需轉載,請註明出處,否則將追究法律責任。

相關文章