VPC淺談
VPC全稱是Virtual Private Cloud,翻譯成中文是虛擬私有雲。但是在有些場合也被翻譯成私有網路或者專有網路等。這裡其實就有些讓人迷惑,VPC究竟是指雲還是網路?答案是,VPC即是一種雲,也是一種網路模式,不過應該從服務和技術的角度分別來看。
虛擬私有雲
首先從服務的角度來看,VPC指的是一種雲(Cloud),這與它的字面意思相符。對於基礎架構服務(IaaS),雲就是指資源池。你或許聽過公有雲(Public Cloud),私有雲(Private Cloud),混合雲(Hybrid Cloud)。不過,VPC不屬於這三種雲中任一種。這是一種運行在公有雲上,將一部分公有雲資源為某個用戶隔離出來,給這個用戶私有使用的資源的集合。VPC是這麼一種雲,它由公有雲管理,運行在公共資源上,但是保證每個用戶之間的資源是隔離,用戶在使用的時候不受其他用戶的影響,感覺像是在使用自己的私有雲一樣。
從這種意義上看,VPC不是網路,我們可以對比VPC和它一個字面上相近的概念:VPN(Virtual Private Network)。VPN在公共的網路資源上虛擬隔離出一個個用戶網路,例如IPsec VPN可以是在互聯網上構建連接用戶私有網路的隧道,MPLS VPN更是直接在運營商的PE設備上劃分隔離的VRF給不同的用戶。從提供服務的角度來,說如果VPC指的只是網路的話,那它跟VPN的概念是重複的。所以,從公有雲所提供的服務來說,VPC應該理解成,向用戶提供的隔離資源的集合。
VPC最早是由AWS在2009年提出[1],不過VPC的一些組成元素在其提出之前就已經存在。VPC只是將這些元素以私有雲的視角重新包裝了一下。在VPC之後,雲主機只能使用VPC內部的對應的元素。從這個角度看,VPC更像是公有雲服務商以打包的形式提供服務。
用戶可以在公有雲上創建一個或者多個VPC,每個部門一個VPC。對於需要連通的部門創建VPC連接。
同時,用戶也可以通過VPN將自己內部的數據中心與公有雲上的VPC連接,構成混合雲。
不論哪種用例,VPC都以更加直觀形象讓用戶來設計如何在公有雲上存放自己的數據。
VPC硬體租用模式
—VPC硬體租用模式(Hardware Tenancy)本身也是公有雲提供的一種服務模式。VPC的硬體租用模式有兩種,一種是共享(shared),一種是專屬(dedicated)。共享是指VPC中的虛擬機運行在共享的硬體資源上,不同VPC中的虛擬機通過VPC進行隔離。專屬是指VPC中的虛擬機運行在專屬的硬體資源上,不同VPC中的虛擬機在物理上就是隔離的,同時VPC幫助實現網路上的隔離。專屬模式相當於用戶直接向公有雲服務商租用物理主機。專屬模式適合那些對於數據安全比較敏感的用戶,不過這些物理主機還是由公有雲服務商管理。不論是共享模式還是專屬模式,VPC都運行在公有雲資源上,由公有雲服務商管理。
專有網路
從技術角度來看,VPC是用戶專屬的一個二層網路。
經典網路 VS VPC
—
AWS的網路產品,在VPC之前稱為EC2-Classic。去年的一個熱點文章《關於阿里雲的經典網路問題》說的就是這兩種網路模式:Classic和VPC。他們之間最核心的區別是:經典網路提供的是多用戶共享的網路,而VPC提供的是用戶專屬的網路。
這裡的網路就是指二層網路,經典網路模型本身有很多問題,其中最大的問題就是安全問題。除非加了特定的防火牆規則去攔截,二層網路內的所有設備默認是可以通信的。這就好比大家都擠在一個房間里,彼此的隱私很難保障一樣。稍有不慎,雲主機就可能被同網路的其他用戶惡意攻擊。而VPC能夠為每個用戶一個專屬獨立的二層網路。這樣相當於給每個用戶分了個房間,用戶的隱私更容易得到保障。就算有惡意攻擊,一般也要走到網關或者VPN設備,在這些集中的設備上,網路流量更可控。
由於每個用戶都有專屬的二層網路,那說明VPC模式下的可用二層網路的數量是遠超經典模式的。雖然各家都沒有公布自己的實現細節,但是這裡有點類似VXLAN和VLAN的關係。VXLAN可以有1600萬個二層網路,VLAN只有4000多個二層網路。公有雲與私有雲的區別在於用戶數量巨大。如果採用VLAN,每個用戶一個二層網路,那最多只能帶4000多個用戶,公有雲許多用戶還是只有1-2個雲主機那種,那必然不能滿足公有雲的需求,所以在早期的經典網路模式下,不得不讓多個用戶擠在一個網路裡面。而如果採用VXLAN之類的技術,則可以保證在一個region裡面為1600萬個用戶每人分到一個二層網路。
因為VPC是一個用戶專屬的網路,用戶可以任意定義VPC內雲主機的IP地址。二層隔離了,IP地址想怎麼玩就怎麼玩。而在經典網路模式下,大家擠在一個二層網路裡面,IP地址首先要保證不要重合,這對用戶和服務商來說都不是一件心情愉快的事情。
VPC的網路Overlay
—
從AWS公布的資料[2] 看,VPC的數據封裝與VXLAN這類網路Overlay技術也很像。從下圖可以看出,桔色的VPC中,10.0.0.2發往10.0.0.3的網路數據,最終被封裝成主機之間的通信報文。
原始的二層幀,被VPC標籤封裝,之後封裝在另一個IP報文裡面。這與VXLAN的封裝方式可以說是一模一樣。不過需要澄清的是,AWS在2010年就已經開始應用VPC,而VXLAN標準是2014年[3]才終稿。AWS的VPC或許和VXLAN不一樣,但是按照VXLAN理解VPC的overlay會更容易些。
VPC使用網路Overlay之後,可以構建一個L3之上的L2。這樣一個VPC內的虛機,可以任意的在數據中心分布。實際中雲主機肯定不是任意分布的,會有一些主機的調度優化演算法,但是至少,網路不會成為限制雲主機部署的因素。舉個反例,如果使用VLAN,虛機必須部署在支持相應VLAN的設備上,哪怕這個設備已經接近飽和,而其他的設備卻是空置的。如下圖,因為左邊的機架不支持相應的網路,對應的雲主機只能往右邊的機架塞,直到塞滿。而同時,左邊的機架負載還不到50%。
Overlay使得VPC不再受網路硬體的限制,VPC內的雲主機可以部署在整個機房。
VPC與SDN
—
AWS在2017年提出,VPC是構建在軟體(代碼)之上,VPC就是SDN[4]。我們前面說過,VPC是一個二層網路,是一個構建在L3之上的L2 Overlay網路。這裡說VPC就是SDN,實際上是指,VPC受SDN所控制。AWS的VPC依靠一個叫Mapping Service的組件工作。當虛機之間要通信的時候,請求先發到Mapping Service,再由它找到目的虛機對應的信息(例如目的虛機所在的主機IP地址),Mapping Service用對應的信息,封裝成Overlay數據(類似於封裝成VXLAN數據),再進行傳輸。
如果是一個三層通信,傳統上是要發到網關,由網關轉發到目的虛機。而對於AWS的VPC,Mapping Service同樣也會完成三層通信的信息查找,數據封裝。這樣連路由器都省了。
這裡的Mapping Service,與SDN控制器的作用可以說是一樣的。SDN控制器掌握了所有的網路信息,當需要進行二層,三層通信時,SDN控制器會根據網路數據包下發OpenFlow流表,使得虛機之間直接通信。
如果說Mapping Service是SDN控制器,那麼更具體點,它還是一個分散式SDN控制器,因為每個主機上都有一個Mapping Service的緩存。通過這種分散式,可以實現高速運算處理。
VPC相關的網路資源
—
VPC雖然指的是專有網路,但是跟網路配套的資源有很多,這些網路資源都是以VPC為單位來劃分。也就是說,定義在一個VPC內的網路資源,只能被這個VPC內的虛機所使用。這在前面講服務的時候提到過。這些資源[5]可以概括如下:
Security Group, Subnet, Network ACL, Routing Table, Router,這些都是老生常談了。以VPC為單位來劃分這些資源,可以更好的突出私有的感覺。但是實際上這些資源大多是虛擬的,每個用戶佔有一份也不會增加公有雲運營商的成本。
需要注意的是,VPC儘管是一個二層網路,但是AWS仍然是通過路由器連接一個VPC下的兩個Subnet。
VPC Edge device
—
前面講服務的時候說過,VPC從服務的角度來看是虛擬私有雲,表示的公有雲運營商提供給用戶的隔離資源的集合。它相當於是漂浮在公有雲上的孤島。真正讓VPC變得強大的是它各式各樣的連接技術。AWS提供了一個Edge設備(Blackfoot Edge Device),VPC通過這個Edge設備可以:
- 與別的VPC相連
- 與互聯網相連
- 與用戶的私有雲建立VPN連接。
- 與AWS的其他服務建立連接。
這才是公有雲服務商在構建VPC網路時,真正的競爭力所在。有了這樣的Edge設備,VPC不再是孤島,而是有了連接其他陸地的橋樑。這裡的Edge設備,可以看成是VNF,AWS需要用戶在VPC內部手動配置路由來引流到這個Edge設備。
最後
不論是對用戶還是公有雲服務商,VPC都是一個更好的選擇。對於用戶來說,首先可以任意定義VPC內的IP地址。其次VPC像是一個容器,裝載著所有的雲主機,同時又與其他的VPC隔離。第三,用戶還可以用各種連接服務(VPN,NAT等)將VPC與現有的網路連接起來。這樣對用戶來說,既保證了網路隔離,又能提供按需的網路連通。對公有雲服務商來說,VPC實際上就是SDN在公有雲的應用。軟體可控,Overlay使得服務商的硬體利用率提高,對硬體廠商的依賴程度降低。在這個基礎上,公有雲服務商還能夠提供更好的網路服務。
參考
[1] https://aws.amazon.com/blogs/aws/introducing-amazon-virtual-private-cloud-vpc/
[2] https://www.youtube.com/watch?v=Zd5hsL-JNY4
[3] https://tools.ietf.org/html/rfc7348
[4] https://www.youtube.com/watch?v=8gc2DgBqo9U
[5] https://aws.amazon.com/blogs/apn/aws-networking-for-developers/
推薦閱讀:
※VLCP的Docker network插件
※NFV對傳統設備廠商(如思科、華為)意味著什麼?
※SDN 技術指南(二):OpenFlow
※VXLAN在數據中心大量VM互聯場景下,能否免去flood-learn學習?
※BGP漫談