一. 概念了解和回顧
上一篇部落格說了,切片定義為一個虛拟網絡的執行個體,而組成切片的流可以被當作有所有可能出現的資料包的標頭構成的整個幾何空間的一個子空間。舉一個例子,openflow的流表項會比對一定的域,我們可以按照不同的域将整個幾何空間進行劃分。
flowvisor定義切片為一組流,是以我們可以将切片當作一組域,給定一個資料包標頭,我們可以判斷出這個資料包包含在哪個流空間中,即可判斷出這個資料包屬于哪個虛拟網絡,是以可以将flowvisor的一個執行個體等價于一個流空間。
flowvisor的設計目标有三點:
這個虛拟化對控制器來說應該是透明的
不同的切片之間是完全獨立的
切片定義是可擴充的
二. flowvisor的的實作
1. 工作流程
flowvisor類似于一個openflow代理,對openflow交換機和控制器之間的消息進行攔截,如下圖左。所有的openflow消息,不論從交換機到使用者還是使用者到交換機,都會經過flowvisor,flowvisor利用openflow協定和使用者、交換機進行通信,flowvisor對交換機和使用者來說是透明的,是以在使用者看來,他們是直接和交換機通信的。接下來以下圖左簡單的例子來闡述flowvisor的操作流程。
bob在控制器上面運作了一個http負載均衡應用,将所有的http流散播到一組伺服器上,bob的flowvisor的政策是切片網絡進而讓自己隻處理所有源ip為一個固定值的http流,而控制器上可以看到所有的http流,控制器自信可以實作負載均衡的任務,他會下發流表,對所有的http流負載均衡。當bob的控制器下發一條流表(如将某個流指引到某個伺服器),flowvisor會攔截他(上圖左1),和bob's的切片政策進行對比(上圖左2),重寫流表項隻對固定源ip的http流有效,這樣控制器就實作了隻控制固定源ip的流,但是他覺得自己控制了所有的流。同樣的,對于從交換機向控制器的消息,flowvisor隻允許滿足對應切片流空間的消息上傳。flowvisor不需要flowvisor執行個體和實體交換機一對一存在,一個flowvisor執行個體可以控制多個實體交換機,甚至可以虛拟化另外一個虛拟網路。如上圖右
作者公布了源碼,是c語言寫的,大約7000行。
2. 切片定義政策
flowvisor中切片被定義為可插入子產品(非常友善和便捷),每個政策由文本配置檔案來描述的,一個切片一個。對于帶寬配置設定,一個切片的所有流都會被映射到一個qos組,每個切片有固定數量的交換機cpu和轉發流表的預算,網絡拓撲被指定為網絡結點和端口的清單。
用一個有序的元素清單,類似于防火牆規則來定義的每個切片的流空間,每個規則描述有一個相關的操作,比如,允許,隻讀或者拒絕,這些被按照特定順序來進行解析,執行第一個比對規則的操作。将所有規則組合起來作為流空間的一部分,基本控制了整個切片。隻讀規則隻允許切片接收openflow控制消息,查詢交換機的統計資訊,不允許在轉發表中插入流表。規則是允許重疊的。
我們接着複雜化前面的場景:bob邀請了他的一些小夥伴和他合作來做http負載均衡實驗,網絡管理者alice準許bob進行這些合作性實驗,alice将參與這個合作性http實驗的人員的http流交由bob控制,她繼續負責剩餘的http流,另外,alice還想要運作一個被動的切片來監測整個網絡的性能,為了實作這樣的功能,我們可以用下面的流空間規則。
bob'的試驗網絡:被定義為所有參與實驗的人員所需要的http流,他的網絡描述檔案對每個使用者隻有一個規則,格式如下:
allow: tcp_port: 80 and ip = user_ip
凡是來自于交換機中可以比對這條規則的openflow消息被轉發到bob的控制器,所有bob意圖插入的流表項都會滿足這些規則
alice的生産網絡:是bob網絡的補集,是以規則如下:
deny: tcp_port:80 and ip=user_ip
allow: all
凡是不進入bob虛拟網絡的交換機的openflow消息都會被進入生産網絡的控制器,對于不滿足bob流空間的流生産控制器就可以随意對它們進行控制
alice的監測網絡:需要看到所有網絡中的流,他的規則如下:
read-only: all
這個規則確定alice的檢測網絡是完全被動的,不與她的生産網、bob的試驗網産生任何沖突
通過上面的描述,我們可以發現,基于規則的政策是比較簡單的,但是他可以滿足實驗和部署要求,更重要的是大家可以對自己所需要的規則完全diy,是以十分靈活和可擴充。
經過這兩篇文章,我基本了解了flowvisor的原理和過程,進一步拓寬了自己的思路,下一篇文章詳細說下flowvisor如何隔離不同的虛拟網絡
作者:cotyb
來源:51cto