本發明涉及軟件定義網絡sdn和網絡功能虛擬化nfv領域,尤其涉及一種輕量級網絡功能虛擬化系統及其虛擬化方法。
背景技術:
::網絡功能虛擬化是指通過通用軟件替代專用物理設備的技術。以云操作系統openstack中neutron模塊的初始網絡模型為例,模型中虛擬路由器和nat這兩種網絡功能被部署在了一個單獨的物理結點上,作為網絡節點,所有的通訊都必須通過網絡結點(也可以部署在虛擬機中,只是性能更差)。在該網絡模型中,不同網段之間的通訊需要通過虛擬路由器,同時相同網段之間的通訊也需要通過虛擬路由器,這導致網絡節點的負載太高,由軟件實現的虛擬路由器完全成為了性能瓶頸。后來對neutron模塊的優化也都致力于消除網絡結點的性能瓶頸,社區的dvr解決方案,華為的dragonflow解決方案及ovn解決方案等等都是如此。其實不僅僅是使用最為頻繁的虛擬路由器會成為網絡瓶頸,只要特定的服務功能鏈(servicefunctionchain,以下簡稱為sfc)使用比較頻繁,在該條sfc中由軟件實現的虛擬網絡功能均可能成為性能瓶頸,所以如果上面的網絡模型能夠找到一個行之有效的解決方案,對其他的虛擬網絡功能均有借鑒意義。技術實現要素:發明目的:為了克服現有技術中存在的不足,本發明提供一種輕量級網絡功能虛擬化系統及其虛擬化方法,作為一套通用的輕量級的nfv(networkfunctionvirtualization)框架,以目前數據中心中流行的虛擬交換機管道技術為基礎,采用開源項目networking-ovn,軟件版本為924b74b,為目前大多數的vnf(virtualnetworkfunction)提供了簡便通用的api,本發明框架簡稱為dfi。技術方案:為實現上述目的,本發明中的一種輕量級網絡功能虛擬化系統,基于虛擬交換機管道技術,包括:通用api模塊,提供虛擬網絡功能的函數調用接口;所述虛擬網絡功能分解為若干個子功能;心跳檢測模塊,檢測虛擬網絡功能的子功能是否失效,若失效則刪除該子功能的相關規則;生命周期管理器,生成子功能規則的持續時間參數;規則產生器,根據所述心跳檢測模塊和所述生命周期管理器產生子功能的流規則;流規則注入器,將規則產生器產生的流規則根據ovsdb協議翻譯成南向數據庫能夠識別的規則,并寫入數據庫中;所述函數調用接口實現對所述心跳檢測模塊、生命周期管理器、規則產生器和流規則注入器的調用。相應地,本發明采用上述的輕量級網絡功能虛擬化系統,還公開了一種輕量級網絡功能虛擬化方法,該方法包括以下步驟:(1)對于服務功能鏈中的每一個網絡功能,抽象出其所有能夠虛擬化的基本操作作為該網絡功能的子功能,將這些基本操作按照調用順序形成操作鏈;(2)按照操作鏈的順序依次調用所述通用api模塊中各子功能對應的api接口,api接口調用所述規則產生器按照openflow規則生成相應的操作規則;(3)api接口向心跳檢測模塊注冊所生成的操作規則,以便后期失效時自動刪除;(4)對于某一基本操作,api接口從所述生命周期管理器中獲取該條基本操作的操作規則的持續時間參數后,調用流規則注入器將所生成的操作規則寫入南向數據庫;(5)將該網絡功能的所有操作規則流注入到計算機節點控制器的管道流表中,完成了該網絡功能的虛擬化。其中,所述網絡功能的子功能包括標記、阻塞、acl和路由重定向功能。具體地,對于某一子功能,生成相應的操作規則并將其操作規則流注入到計算機節點控制器的管道流表中,具體為:(1)所述通用api模塊通過jsonrpc調用獲取該子功能數據報文的基本信息,并通過ovsdb協議向數據庫中獲取注入流的必要信息,所述必要信息包括待注入管道的唯一標識uuid,所述標識uuid用于確定管道的位置;(2)通用api模塊調取所述心跳檢測模塊獲取失效信息以及調取生命周期管理器獲取持續時間信息,再調取所述規則產生器填充該子功能所涉及的所有相關信息生成相應的流規則,最后再調用所述流規則注入器對流規則進一步封裝后通過ovsdb協議寫入南向數據庫;(3)計算機節點的控制器檢測到所述南向數據庫的變化,自動獲取更新的規則,寫入相應的管道中的規則表中使得該計算機節點的管道規則表中具備了該子功能的規則。有益效果:本發明中的輕量級網絡功能虛擬化系統以及相應的虛擬化方法,以目前數據中心中流行的虛擬交換機管道(ovspipeline)技術為基礎,為目前大多數的vnf提供了簡便通用的api,vnf通過jsonrpc遠程調用api,能夠實現對本地sdn流表的直接控制,從而能夠進一步向其寫入vnf的部分功能,最終實現了vnf部分功能本地完成,避免將網絡流量全部導入遠程的vnf處理。通過該系統vnf部分功能能夠直接本地完成,不需要再經vnf結點處理,減輕了vnf負載;同時部分流量不再導入遠程vnf,減緩了網絡的負載,同時縮短了通訊時延。附圖說明圖1為本發明中輕量級網絡功能虛擬化系統的結構圖;圖2為本發明中輕量級網絡功能虛擬化方法的流程圖;圖3為標記功能的業務流圖;圖4為fw-ips服務鏈對比效果圖,圖4(a)為現有技術中fw-ips服務的通訊路徑示意圖,圖4(b)為采用本發明方法后fw-ips服務的通訊路徑示意圖。具體實施方式以下結合具體實施例與附圖對本發明進行詳細描述。如圖1所示,本發明中輕量級網絡功能虛擬化系統(簡稱dfi),應用在兩個計算節點之間,實現部分網絡功能的虛擬機化,包括:通用api模塊(apis)、心跳檢測模塊(hearttest)、生命周期管理器(lifecyclemanager)和規則產生器(rulegenerator)以及流規則注入器(flowinjector)。本系統可以安裝在任意的機器上,需要由兼容的虛擬網絡功能配合,完成部分網絡功能本地化,即網絡功能虛擬化指的是在通用計算機上實現(如圖1的計算節點)以前在專用物理設備實現的功能,各模塊的功能介紹如下:通用api模塊(apis):用于提供給各個網絡功能調用的函數接口,采用jsonrpc以超文本傳輸協議(hypertexttransportprotocol,簡稱為http協議)完成;絕大數的復雜網絡功能可以分解成基本的子功能,這些子功能包括標記、阻塞、acl和路由重定向功能等。標記子功能是指對數據流的特定字段進行標記,即對數據流進行差分服務代碼點標記(differentiatedservicescodepoint,以下簡稱為dscp);阻塞是指對某些流的數據包執行丟棄,即阻止數據流進入數據中心;acl(accesscontrollist)是網絡功能端口的管理,即對數據流進行接入接出控制;路由重定向是指修改數據報文的目的地址,使其轉發到特定的目的地,將數據流重新導向到下一個網絡節點。虛擬網絡功能本地化實現就是通過組合調用通用子功能api完成的。心跳檢測模塊(hearttest):檢測虛擬網絡功能的子功能是否失效,如果失效需要刪除該虛擬網絡功能相關的規則,防止失效的規則仍然生效。生命周期管理器(lifecyclemanager):用于生成子功能規則的持續時間參數,規則的持續時間需要智能的進行學習,臨時的規則需要設置小的持續時間,以便及時更新;長久的規則需要設置大的持續時間,避免重新生成規則造成時延;規則產生器(rulegenerator):根據心跳檢測模塊和生命周期管理器產生具體的流規則,完成各種虛擬網絡功能的子功能;流規則注入器(flowinjector):將規則產生器產生的規則根據ovsdb(rfc7047)協議翻譯成南向數據庫能夠識別的規則,最終寫入數據庫中。下面以圖1中的兩個計算節點之間的通訊為例,具體介紹如何利用本發明中的輕量級網絡功能虛擬化系統(簡稱dfi)實現網絡功能的虛擬化。如圖1所示,兩個計算節點上均運行著兩個虛擬機,圖左邊的計算節點1上的虛擬機分別運行著軟件應用1和網絡功能防火墻;圖右邊的計算節點2上的虛擬機分別運行著軟件應用2和網絡功能入侵檢測系統。假設應用1需要與應用2通訊,如果不使用本發明中的dfi,常規的數據流可能需要經過的路徑為:應用1<-->管道1<-->物理網絡<-->管道2<-->入侵檢測系統<-->管道2<-->物理網絡<-->管道1<-->防火墻<-->管道1<-->物理網絡<-->管道2<-->應用2(這是一個雙向通訊過程)。但是如果使用本發明中的輕量級網絡功能虛擬化系統,同樣的數據流的路徑則為:應用1<-->管道1<-->物理網絡<-->管道2<-->應用2。可以看到dfi大大的縮短了通訊路徑長度,從而縮短了通訊時延,同樣也降低了原本防火墻和入侵檢測系統的負載。之所以能夠產生這樣效果,歸功于dfi系統將防火墻和入侵檢測系統的部分功能實現在管道1和管道2處。管道1和管道2是虛擬交換機管道,為ovs的多級流表。圖1的例子中數據流需要經過防火墻和入侵檢測系統這兩個虛擬網絡功能組成了一條簡單的服務功能鏈,可以看做分別對應圖2中的虛擬網絡功能1和虛擬網絡功能2。其中入侵檢測系統除了能夠檢測數據流是否含有惡意攻擊,還能作為流分析器使用,它能夠對不同類別的數據流進行標記,然后導出到不同的應用進行處理。所以這里假設入侵檢測系統可以分解為三個子功能:標記、阻塞和重定向。不同虛擬網絡功能的子功能共同組合成了圖2中的操作鏈。如圖2所示,本發明中的輕量級網絡功能虛擬化方法,采用圖1中介紹的系統實現網絡功能的虛擬化,包括以下步驟:(1)對于服務功能鏈中的每一個網絡功能,抽象出其所有能夠虛擬化的基本操作作為該網絡功能的子功能,將這些基本操作按照調用順序形成操作鏈;(2)按照操作鏈的順序依次調用所述通用api模塊中各子功能對應的api接口,api接口調用所述規則產生器按照openflow規則生成相應的操作規則;(3)api接口向心跳檢測模塊注冊所生成的操作規則,以便后期失效時自動刪除;(4)對于某一基本操作,api接口從所述生命周期管理器中獲取該條基本操作的操作規則的持續時間參數后,調用流規則注入器將所生成的操作規則寫入南向數據庫;(5)將該網絡功能的所有操作規則流注入到計算機節點控制器的管道流表中,完成了該網絡功能的虛擬化。圖2中的流表則是虛擬交換機管道的基本組件,下面以將入侵檢測系統的標記子功能(操作)為例,闡述將操作鏈中的每一個操作注入到管道流表的基本步驟:(1)入侵檢測系統,作為實現網絡功能的一種專用物理設備,正常接受數據流,分析其類型,發現需要對流進行dscp標記(標記子功能),因為需要將該子功能注入到管道中,所以入侵檢測系統收集數據報文的源ip地址,源端口號,目的ip地址,目的端口和剛剛標記的dscp號等基本信息,通過jsonrpc調用,向本發明中的輕量級網絡功能虛擬化系統dfi發送需要的信息;(2)輕量級網絡功能虛擬化系統(dfi)中的通用api模塊通過jsonrpc調用獲取該子功能數據報文的基本信息,并通過ovsdb(rfc7047)協議向數據庫中獲取注入流的必要信息,這些信息主要是指即將要注入管道的唯一標識(uuid),因為不同計算節點上的管道具有不同的唯一標識,dfi需要根據源ip地址從數據庫中確定管道標識,即確定管道的位置;(3)通用api模塊調用心跳檢測模塊和生命周期管理器獲取失效信息和持續時間信息后,通用api模塊調用規則生成器填充標記功能所涉及的所有信息,包括源ip地址號,源端口地址,目的ip地址,目的端口號以及標記的dscp號,持續時間,openflow協議操作為標記,最后封裝后通過流規則注入器利用ovsdb協議寫入數據庫;(4)計算節點1的控制器檢測數據庫的變化,自動獲取更新的規則,寫入相應的管道中的規則表中,此時計算節點1的管道規則表中具備了標記規則,也就是說該管道具備入侵檢測系統的標記子功能。(5)最終所有的流標記工作則由地方的管道完成,然后直接導向目的地,不再經過入侵檢測系統。對于操作鏈中的每一個操作(子功能),均按照與上述類似的方式注入到對應管道中,區別的地方僅在對于不同子功能,所填充的信息不太相同,從而最終完成服務功能鏈的網絡功能虛擬化。若該子功能為阻塞功能,則該子功能所涉及的所有相關信息包括:所述數據報文的基本信息以及設置openflow協議操作的內容為拒絕;所述數據報文的基本信息包括:源ip地址和源端口地址。若該子功能為acl功能,則該子功能所涉及的所有相關信息包括:所述數據報文的基本信息以及根據具體流中的操作信息設置openflow協議操作的內容;所述數據報文的基本信息包括:源ip地址,源端口地址,目的ip地址和目的端口號,目的端口和所標記的dscp號。若該子功能為路由重定向功能,步驟(2)中該子功能所涉及的所有相關信息包括:所述數據報文的基本信息以及設置openflow協議操作的內容為允許;所述數據報文的基本信息包括:源ip地址,源端口地址,目的ip地址和目的端口號。在上面已經闡述了一個具體的子功能(操作)注入到管道的大致過程,而每個子功能(操作)對應了通用api模塊中每個基本api(如marking,acl,blocking和routing等),其最終的實現則是通過一系列的函數調用來完成的,下面將闡述這部分細節。首先基本的函數包括:(1)get_metadata();(2)inject_flow();(3)updata_flow();(4)delete_flow();(5)is_injectable();(6)is_success()。這些代碼均是本系統采用python程序設計語言自行編寫的。這里同樣以入侵檢測系統的標記子功能為例,結合圖3進行函數代碼細節闡述:(1)首先dfi獲取遠程入侵檢測系統發來的關于數據流的基本信息(同上文所述);(2)使用get_metadata()函數獲取即將要注入管道的唯一標識(uuid),以便dfi根據基本信息中的源ip地址從數據庫中確定管道標識,從而確定管道的位置;(3)使用is_success()函數確定是否成功獲取管道信息,失敗返回異常;成功繼續執行下述的步驟;(4)使用is_injectable()函數判斷目的管道目前是否處于正常工作狀態,失敗返回異常;成功繼續執行下述的步驟;(5)然后使用inject_flow()封裝填充標記規則的所有信息,包括ip地址信息,端口信息等,封裝后通過ovsdb協議寫入數據庫;(6)最后同樣使用is_success()函數確定是否成功完成規則注入,失敗返回異常;成功則正常結束本函數;另外兩個基本函數updata_flow()和delete_flow()主要用于更新管道的規則以及刪除過期的規則。阻塞、acl和路由重定向的基本函數調用流程與標記基本一致,不同的是,inject_flow()函數中對不同子功能的處理有所不同:對于阻塞子功能,本函數僅需要填寫源ip地址和源端口地址,openflow協議操作為拒絕;對于acl子功能,本函數需要填寫源ip地址,源端口地址,目的ip地址和目的端口號,openflow協議操作根據具體原本流中的操作信息而定;對于路由重定向子功能,本函數需要填寫源ip地址,源端口地址,目的ip地址和目的端口號,openflow協議操作為允許。圖4是fw-ids服務鏈效果圖,圖中展示的服務功能鏈主要有兩個防火墻(fw)和入侵檢測系統(ids),此時受感染的虛擬機1嘗試對虛擬機2進行攻擊,但在經過入侵檢測系統時被發現,同時被阻塞。原先的通訊路徑為:受感染的虛擬機1<-->管道1<-->物理交換機2<-->防火墻<-->物理交換機2<-->物理交換機4<-->虛擬交換5<-->入侵檢測系統。此后攻擊流仍然需要經過上述的路徑后才能被阻塞,這占用了大量鏈路帶寬,加重了防火墻和入侵檢測系統的負擔。然而使用了本系統dfi后,一旦確定數據流需要阻塞時,入侵檢測系統和防火墻會調用dfi的通用api模塊,按照前文所述的步驟向管道1中注入阻塞規則,這樣攻擊流在管道1就被阻塞,無用的數據流不用在鏈路上傳輸,極大的降低了網絡鏈路和網絡功能的負載,因為傳輸的路徑縮短了,同時也降低了服務的傳輸時延。以上詳細描述了本發明的優選實施方式,但是,本發明并不限于上述實施方式中的具體細節,在本發明的技術構思范圍內,可以對本發明的技術方案進行多種等同變換,這些等同變換均屬于本發明的保護范圍。當前第1頁12當前第1頁12