VPC(全稱是Virtual Private Cloud,做網(wǎng)絡(luò)的同學(xué)尤其注意,不是思科vPC的virtual Port Channel)是AWS的云平臺概念,OpenStack里并沒有這一個內(nèi)容;比較起來,VPC對應(yīng)OpenStack的一個vRouter及其相關(guān)的網(wǎng)絡(luò)和子網(wǎng)等資源。通常來講,Neutron的兩個vRouter是相互隔離的,才能確保尤其是不同租戶之間的安全性,但是在某些場景下存在兩個VPC間互通的需求,這種需求的解決方案在AWS里稱之為VPC-Peering(http://docs.aws.amazon.com/zh_cn/AmazonVPC/latest/PeeringGuide/Welcome.html
),這些場景舉例來說:
1. 災(zāi)難恢復(fù)的場景,需要將VPC的數(shù)據(jù)同步到另一個VPC,實現(xiàn)容災(zāi)備份;AWS的VPC現(xiàn)在是不能跨Region的,特定VPC子網(wǎng)也不能跨AZ(Availability Zone),但AWS的VPC-Peering雖不支持跨Region,但支持跨賬戶;
2. 混合云中尤其是不同云平臺的數(shù)據(jù)間通信時,使用VPC間通信也是可以的,但VPC通信并不是一種標(biāo)準(zhǔn)的通信特性或通信協(xié)議,所以會對管理平臺或數(shù)據(jù)模型有一定匹配度要求;
3. 在云平臺部署到眾多DC規(guī)模較小且相互聯(lián)接的情況下,通過VPC互通為節(jié)省用戶數(shù)據(jù)通信的成本;
AWS的官網(wǎng)明確說明,“AWS 使用現(xiàn)有 VPC 基礎(chǔ)設(shè)施創(chuàng)建 VPC 對等連接,既不是網(wǎng)關(guān),也不是 VPN 連接,因此不依賴某個獨立的實體硬件。沒有單點通信故障也沒有帶寬瓶頸”,并且有如下主要限制(http://docs.aws.amazon.com/zh_cn/AmazonVPC/latest/PeeringGuide/vpc-peering-overview.html#vpc-peering-limitations):
1)無法在具有匹配或重疊的 CIDR 塊的 VPC 之間創(chuàng)建 VPC 對等連接;
2)無法在位于不同區(qū)域中的 VPC 之間創(chuàng)建 VPC 對等連接;
3)只能為每個 VPC 創(chuàng)建數(shù)量有限的活動和待定 VPC 對等連接;
4)VPC 對等不支持傳遞的對等關(guān)系;
5)不能在相同兩個 VPC 之間同時建立多個 VPC 對等連接;
6)通過 VPC 對等連接的最大傳輸單元 (MTU) 為 1500 字節(jié);
7)不支持在 VPC 對等連接中進(jìn)行單一地址反向傳輸路徑轉(zhuǎn)發(fā);
8)置放組可以跨越對等的 VPC;但是,您不會在對等 VPC 中的實例之間獲得完全等分的帶寬;
9)一個實例的公有 DNS 主機名稱不會跨對等的 VPC 解析為其私有 IP 地址。
AWS的VPC-Peering管理模型和建立過程與VPN有類似之處,需要建立一個通信認(rèn)證機制和通信的狀態(tài)管理,這些都是OpenStack控制面所缺少的,AWS的VPC-Peering通信狀態(tài)機制如下:
相比于AWS的網(wǎng)絡(luò)豐富特性之一,VPC-Peering,除了需要實現(xiàn)建立通信認(rèn)證機制外,OpenStack的網(wǎng)絡(luò)組件Neutron也并沒有明確支持的對象,不過我們可以在現(xiàn)有Neutron能力基礎(chǔ)上, 在此類討論下有哪些可能的實現(xiàn)方案:
1)基于IPSec類似的端到端VPN
如果將兩個vRouter之間建立一條端到端的VPN隧道,實現(xiàn)VPC互通是行的通的,但是這個方案對云平臺的依賴度較高,就是說如果建立VPN隧道是通過公網(wǎng)IP來進(jìn)行,那么基本可以歸結(jié)為VPN功能(這個時候的帶寬和網(wǎng)絡(luò)延遲就會有影響),特性也不是VPC-Peering了,所以需要對云平臺內(nèi)網(wǎng)要求有一個內(nèi)網(wǎng)網(wǎng)段和vRouter打通,讓租戶感知來創(chuàng)建基于內(nèi)網(wǎng)的諸如IPSec VPN隧道。另外,還需要考慮到,IPSec自身是不支持組播和廣播的,租戶此類業(yè)務(wù)需要通過GRE+IPSec的技術(shù)租戶來實現(xiàn)。
2)share network
基于OpenStack云平臺的管理員可以使用Neutron來創(chuàng)建Shared類型的Network,這樣基本所有租戶都看的到并創(chuàng)建虛擬機在上面進(jìn)行通信,比如浮動IP的external-network基本是將Shared屬性設(shè)置為True的。那么需要互通的兩個VPC網(wǎng)段的虛擬機可以都多出來一個port連接到Shared network上實現(xiàn)VPC互通。這個Share Network為了防止占用公網(wǎng)地址成本高,可以選擇一個大范圍的私網(wǎng)地址段;這種方式
a)要求這個Shared network必須預(yù)先創(chuàng)建,且其網(wǎng)段范圍有特殊要求,盡量減少與租戶VPC網(wǎng)段地址重疊的影響;
b)該Share Network為管理員創(chuàng)建的,所以所有租戶都可以看到并使用,這樣就破壞了VPC的安全隔離性,需要不同VPC之間互通的時候做好安全控制;
3)VM連接跨VPC的network實現(xiàn)VNF
當(dāng)一個租戶的兩個VPC想互通,可以簡單的啟動一個虛擬機實例,讓該虛擬機同時連接到兩個VPC各對應(yīng)由互通訴求的網(wǎng)絡(luò)上;該方案相比于AWS的VPC-Peering需要指定虛擬機的Fixd IP,并在虛擬機內(nèi)部加載路由和過濾規(guī)則,實現(xiàn)指定網(wǎng)段地址的VPC互通;另外為了實現(xiàn)將某個VPC發(fā)往另一個VPC流量到該虛擬機實例進(jìn)行中轉(zhuǎn),需要借助Service chain或者策略路由的方式進(jìn)行引流,然后讓虛擬機實現(xiàn)VNF(Virtual Network Function)的功能打通VPC通路。
但是該方案若是有需求實現(xiàn)兩個租戶其各自一個VPC之間互通時,因為沒有任何一個租戶可以看到對端的資源,所以就會產(chǎn)生創(chuàng)建虛擬機時連接網(wǎng)絡(luò)的權(quán)限問題,需要借助管理員創(chuàng)建虛擬機來打通兩個VPC;這無疑為VPC互通時租戶的管理和維護(hù)帶來不方便。
4)借助Gre/Vxlan等隧道模式
最后說一種業(yè)界比較常用的方案,就是在兩個vRouter之間建立一條Gre或Vxlan的內(nèi)網(wǎng)新隧道,該方案原理上與Share Network類似,都是使用一個新的隔離域,但是僅是兩個VPC間私有,不為其他VPC共享。該方案中的Gre或Vxlan隧道隔離域值可以是Neutron從預(yù),留的范圍里面進(jìn)行分配,然后借助SDN控制器打通整條鏈路的通道,從而實現(xiàn)兩個VPC間的互通,猜測AWS的VPC-Peering的實現(xiàn)是基于此方案。但是該方案需要針對Neutron進(jìn)行特定的開發(fā),而且使用成本也相對較高,當(dāng)然所能使用的帶寬和延遲等性能指標(biāo),也會較好。
當(dāng)然,當(dāng)Neutron的租戶網(wǎng)絡(luò)使用Vxlan時,VPC間通信使用另一種隔離方式比如Gre思路會比較清晰,但是數(shù)據(jù)轉(zhuǎn)發(fā)面實現(xiàn)和運維相對會增加復(fù)雜度。
總之,基于Neutron的VPC間通信方案還沒有社區(qū)的統(tǒng)一實現(xiàn),各種方案成本、可靠性、性能、隔離性和可維護(hù)性等不太相同,需要根據(jù)自己的業(yè)務(wù)實際情況和技術(shù)積累,選擇合理低成本的方案。
作者簡介:李俊武,sina微博北京-小武,著有《云計算網(wǎng)絡(luò)珠璣》;三年多交換機研發(fā)經(jīng)歷(熟悉Broadcom、Marvell等公司交換芯片轉(zhuǎn)發(fā)流程和網(wǎng)絡(luò)協(xié)議),兩年多基于Openstack云計算平臺架構(gòu)設(shè)計經(jīng)驗,現(xiàn)在華為IT產(chǎn)品線的云計算網(wǎng)絡(luò)架構(gòu)與設(shè)計組,參與華為公有云和私有云的架構(gòu)設(shè)計方面的工作,包括云平臺網(wǎng)絡(luò)集成華為SDN控制器方面的設(shè)計工作等。