云計算(嚴格說是IaaS)的核心訴求就是向用戶提供虛擬機。為了盡可能地提高CPU、內存的利用率,一臺物理服務器中往往支撐著數十臺甚至上百臺虛擬機。接入是虛擬機聯網的第一跳,接入做不好,什么大二層這些說法都是白扯。于是,虛擬機的接入成為了云網絡變革中的頭等大事。
1)VEB
傳統接入網絡中,一臺主機通過一塊物理網卡加上一條網線連接到接入交換機的一個物理端口上(不考慮網卡綁定)。可是面對龐大的虛擬機軍團,傳統的接入網絡可傻了眼。物理服務器上的那幾塊網卡可哪夠這些虛擬機分啊,另外網絡的布線,交換機的端口密度也都難以滿足大規模的虛擬機接入。
硬件的資源矛盾難以調和,那么解決這一問題自然而然的思路就是將接入網絡的位置下移,延伸到物理服務器中。這種思路自虛擬化誕生的那一天起就有了,做法就是在HyperVisor中加一個軟交換模塊VEB(Virtual Ethernet Bridge),通過虛擬端口關聯虛擬機,用于虛擬機的接入和本地交換,通過一塊物理網卡上聯物理交換機(不考慮網卡綁定),如果通信目標不在本地就交給上游的物理交換機。上游的交換機也全然意識不到它是個軟件交換機,一切都跟傳統以太網沒什么兩樣。
VEB在技術上沒什么難點,商用如VMware的VDS和Cisco的Nexus 1000V,開源如Linux Bridge和Open vSwitch,產品已經十分成熟。如果單純從功能實現的角度來看,軟件交換機的功能可以比物理交換機更為強大,升級起來也靈活的多,比如VxLAN這種延伸到服務器中的端到端隧道就能夠很好地與VEB配合著做接入。可是由于軟件交換機畢竟是通過CPU和通用內存來做交換的邏輯,其性能自然與基于ASIC的物理交換機有著巨大的差距。當然,這個差距可以通過多分配CPU和內存來填補,但是這就意味著服務器中能夠給虛擬機分配的資源變少了,屬于典型的丟了西瓜,撿了芝麻的做法。
解決這一問題,可以將服務器網卡進行改造,以具備接入交換機的功能,不過這種思路實現起來難度極大——把ASIC芯片、TCAM和總線資源都要集成在小小的網卡中,想一想都覺得頭疼。因此,這種思路并沒有得到廣泛的研究與應用。不過,其衍生技術——虛擬化網卡,卻得到了一定程度的發展,虛擬化網卡直接為虛擬機提供虛擬化的總線通道,而旁路調了VEB,模擬了傳統接入網絡中網線的角色,其代表技術為SR-IOV。
另外一種思路是VEB只保留接入端口和一些簡化的轉發功能,復雜的接入策略則轉移給上游物理交換機。除了能夠提升性能,這種思路還有另外一個非技術方面的驅動因素——網絡復雜的功能分離到了服務器外面,使得服務器團隊和網絡團隊的管理邊界變得十分明確,避免了很多不必要的麻煩事兒。其代表技術為Cisco陣營的VN-TAG和非Cisco陣營的VEPA。
2)VN-TAG
VN-TAG是Cisco的私有標準,利用一個全新的標簽實現了完整的數據中心接入方案,主要包括VN-Link技術和FEX技術。VN-Link部署在服務器的交換組件上,負責虛擬機的接入,而FEX部署在接入層的物理交換機上,負責虛擬機間的互通。兩者配合在一起實現了虛擬機的實時感知和分布式接入,接入配置和策略的集中式分發保證了虛擬機的無縫遷移。
老規矩,幀格式先行。VN-TAG將6個字節的新字段插入到VLAN的前面,這些字節只在VN-TAG設備中出現,現有的協議(包括VLAN的使用)不會受到任何的影響。其中,DVIF_ID/SVIF_ID是目的/源虛擬機被分配的唯一標識,各有12位,通過Port Profile的配置與虛擬機接入端口進行一對一的通道綁定,VN-TAG物理交換機將根據這個標識來識別虛擬機,實現網絡接口虛擬化。其他的標志位用于FEX系統中,D位標識報文的走向,P位標識報文是否需要復制,L位標識源主機和目的主機是否連接在同一臺物理交換機上,R位作為保留。
通信流程概括如下:服務器中的交換組件不進行MAC尋址,它接受源虛擬機的流量,封裝好VN-TAG(標記SVI_ID),然后直接交給上游的物理交換機,上游的交換機完成SVI_ID對源MAC地址、VLAN和入端口的學習,根據目的MAC地址標記DVI_ID,然后轉發給目標服務器,目標服務器根據DVI_ID進行通道轉發,剝掉VN-TAG后轉發給目標虛擬機。借用《騰云——云計算和大數據時代網絡技術揭秘》中的一張圖來表達上述過程,同時對該書作者表示感謝。
圖中,Port Extender向下為VN-Link技術,向上為FEX技術。VN-Link由支持VN-TAG的網卡實現,如Cisco UCS刀片服務器中集成的Palo,該網卡只負責VN-TAG的封裝/解封裝,不做任何策略相關的工作。FEX技術由Cisco的N2K/N5K組合實現,支持以級聯方式組網,其中N5K負責尋址轉發和策略的制定,N2K則作為N5K的遠端板卡部署在ToR實現分布式接入,N5K通過VIC協議分發給N2K,實現分布式轉發。以作者目前的理解,VN-TAG體系將數據中心的接入網絡虛擬成了一個大的接入交換機,由VN-Link充當網線,由N2K充當分布式線卡,N5K充當主控板,處于任何物理位置的虛擬機都好像連接在這個大的接入交換機上。高帶寬、無阻塞和低時延的優良特性使得N2K/N5K間網絡連接能夠與單機內總線相當,保證了分布式接入的性能。在N5K上可以基于虛擬機對應的SVI_ID/DVI_ID制定ACL,QoS和流控等高級接入策略,支持網絡策略隨虛擬機任意的漂移。
VN-TAG是Cisco的野心之作,其產品線已然非常完善,其目標直指統一整個數據中心的接入網絡。不過由于VN-TAG是Cisco私有標準,而且新的字段必然要新的芯片來支持,所以其它的廠家沒有一個能玩得轉。雖然Cisco貴為數通領域的江湖老大,但是估計也不愿意做孤家寡人,于是按照著VN-TAG的思路,Cisco提了802.1Br的開放標準(其前身為802.1Qbh)給IEEE,平復了一眾小弟們的情緒。
當然了,也不是所有人都對老大言聽計從。作為網絡界的帶頭大哥,Cisco的想法自然是把網絡延伸到服務器當中去,于是搞了塊新的芯片支持VN-TAG,“順便”集成在了UCS刀片服務器中,想用VN-TAG的話,OK,先買我的刀片。HP作為服務器界的龍頭,對Cisco這種行為不爽的很,靠著網絡虛擬化就想用UCS做掉我的服務器?作為回應,HP振臂一呼扯開VEPA的大旗,和Cisco叫上了板。
3)VEPA
VEPA(Virtual Ethernet Port Aggregator,802.1Qbg)是HP提出的虛擬機接入方案,設計目標就是盡量避免服務器上的大幅度改動。前面提到,無論是VN-TAG還是VEPA,都是為了解決VEB消耗大量服務器資源的問題。HP沒辦法搞定芯片來支持新字段,那么做不了加法就只好在原有的基礎上動腦筋。VEPA對以太網幀格式沒有任何的修改,而是通過對以太網轉發規則的巧妙修改,同樣卸載了服務器的負擔。
802.1Qbg中,服務器中的VEPA組件間與虛擬機間運行VDP(Virtual Station Interface Discovery Protocol)協議,以識別虛擬機接入位置,同時支持對虛擬機遷移的感知。標準VEPA中,服務器的VEPA組件在虛擬機端口接收到的流量,不做任何處理,一律扔給上游的VEPA物理交換機。上游交換機正常做自學習,其改動之處在于VEPA修改了STP以允許入端口泛洪/轉發,如果發現目的MAC地址在同一臺服務器中,就再交給該服務器的VEPA組件,VEPA組件對于從上游交換機收到的流量進行MAC尋址轉發,完成虛擬機間的通信。這個過程如下圖所示,本地流量被強行繞彎通過上游交換機,俗稱harpin,十分粗暴卻簡單有效。
VEPA的優勢在于不需要對芯片做改動,交換機和服務器網卡的軟件和驅動升級后就能支持VEPA了。但是,簡單也往往意味著功能較弱。由于不帶任何新的標簽,所有流量都混在一起,上游VEPA交換機上的控制策略就很難做了。
在數通網絡里,想要標識流量,肯定是要使用特定的字段來做的。HP沒法另起爐灶,只能用已有的協議字段。VLAN是不行的,因為往往要用它來區分業務,于是HP看中了QinQ(802.1ad),在標準VEPA的基礎上使用QinQ的S-TAG來標識虛擬機流量,形成了增強型VEPA(802.1Qbg Multi- Channel)。有人可能要問了,虛擬機MAC地址不是唯一的嗎,用來做策略不行嗎?行,但是很麻煩,而且做不了分組策略。
在Multi- Channel中,一些S-TAG的流量可以在本地直接進行轉發,而不用hairpin。另外對于廣播/組播流量的處理,VEPA也做了一定的完善,允許在合理的位置進行復制,而VN-TAG只允許在N2K上進行復制。這兩點也算是一個對標準VEPA的完善吧。
拋開一些細節不談,Multi- Channel與VN-TAG沒有本質上的區別,服務器為上行流量打標記,上游交換機做尋址、定策略,下行流量服務器上做通道轉發。相比于VN-TAG使用FEX作為分布式接入技術,Multi- Channel因為用了QinQ,使得其接入的規模受到了一定的限制——S-TAG無法在傳統的以太網設備上透傳,只能在第一跳VEPA交換機終結。
不過這并不影響VEPA在虛擬機接入的市場上與VN-TAG分庭抗禮,畢竟市場這么大,大家誰也不好一口吃掉誰。另外,OpenStack+SDN+VxLAN這幾年的興起也向虛擬機接入市場注入了新的勢力,不過隧道的封裝終歸也還是要OffLoad到物理交換機上的,服務器里的接入還得是VN-TAG和VEPA的二人轉。
最后做一個補充,這幾天又看到了華為最近推出的縱向虛擬化技術SVF,這個技術其實本質上就是華為的FEX——CE6800相當于Nexus 5000做接入、轉發決策,CE5800相當于Nexus 2000作為遠端板卡進行分布式接入、轉發,SVF整合CE5800/6800形成一臺大的虛擬接入交換機。雖然都是Cisco玩過了的東西,不過華為的技術功底之深厚還是可見一斑。
作者簡介:
張晨,北京郵電大學未來網絡理論與應用實驗室研究生
主要研究方向:SDN、虛擬化、數據中心
個人博客:sdnv.xyz
個人郵箱:[email protected]