深入淺出新一代雲網路——VPC中的那些功能與基於OpenStack Neutron的實現(一)-簡述與埠轉發

VPC的概念與基於vxlan的overlay實現很早就有了,標題中的「新」只是一個和傳統網路的相對概念。但從前年開始,不同於以往基礎網路架構的新一代SDN網路才真正越來越多的走進國內甲方廠商的視野,而從去年至今,筆者經歷的諸多客戶也在歷經學習、測試後逐步將其部署入生產。與此同時,國內的公有雲廠商們也或多或少地投入了對市場的教育成本,鼓勵客戶使用功能更強大,安全性更好的VPC網路。

  • 什麼是VPC

VPC即virtual private cloud ,因其最大的特點還是網路方面,故行業內有時也稱其為私有網路,在基礎雲計算環境之上,支持用戶定義自己的虛擬網路,這個網路在邏輯上與雲中的其他虛擬網路隔絕,用戶可選擇私有 IP 地址範圍、創建子網以及配置路由表、網路網關和安全設置等。

傳統基礎網路的管理員視角:

(當然實際上,以往的IT集成架構會基於業務需求和安全需求作複雜的 外-核心-匯聚-接入-用戶的層次劃分。)

從用戶的視角甚至可以簡化為:

實際雲環境中,拋開雲主機的安全組策略、上層交換設備的ACL等不談,各用戶處於同一層次的網路中,IP自然也由平台管理端分配。

而對於使用VPC網路的環境來說:

左邊顏色區域是一個用戶,右邊顏色區域是另一個用戶。兩者各自的網路廣播域不會互相影響,IP自然也可以由用戶指定。從圖中不難發現,與基礎網路相比,路由正是VPC網路的核心。

那麼開頭所說的「功能更強大,安全性更好」具體指什麼呢?功能更強大,指的是更便利、形式多樣的互聯互通、帶寬分配等網路功能;安全性更好,指的是用戶的私有網路隱藏在路由之內,不僅互不影響,還可以將訪問控制的執行者,從雲主機本身一直延伸到三層。

  • VPC-NAT

NAT即網路地址轉換,分為DNAT(目的地址轉換)與SNAT(源地址轉換),最直白地從常見功能目的來說, DNAT可以用於實現一個上層(路由的外層)地址的埠轉發到下層(路由的內層)網路某個地址的某埠,SNAT可以用於實現多台雲主機共享一個網關地址訪問上層(路由的外層)網路。

第一個很好理解,4層埠轉發。

有時候為了管理需要,要能在外層網路管理私網中的三台雲主機,而這三台雲主機僅有私網地址沒有外層地址,那麼可以使用埠轉發,將路由外層地址 114.123.123.x 的22埠轉發至第一台雲主機10.1.1.3的22埠,將114.123.123.x的23埠轉發至第二台雲主機的22埠,將路由的24埠轉發至第三台雲主機的22埠。如此通過SSH一個外層地址的不同埠來連接到私網內的三台雲主機。

其實和7層的轉發有那麼點相似之處,比如 Nginx的80埠代理後端應用伺服器的8080埠,81埠代理另一台伺服器的8080埠。還真別說,Nginx自從1.9版本後開始支持TCP代理了。

拋開應用層轉發不談,基於OpenStack該如何實現呢?

熟悉虛擬化與容器技術的朋友肯定熟悉linux的namespace(命名空間),在Neutron 的L3節點上,不同用戶的VPC路由正是用namespace技術實現的隔離,這一點和不同vxlan網路的隔離還是有很大區別的,本篇不談。

netns是在Linux中提供網路虛擬化的一個項目,使用netns網路空間虛擬化可以在本地虛擬化出多個網路環境

所以,在L3節點使用ip netns 可以看到含本地所有網路命名空間的list:

可以發現,其實不同網路的dhcp服務與負載均衡服務(非Octavia)也是使用類似的方式。

qrouter後面接的uuid正是路由的uuid。通過這種方式即可進入VPC路由所在命名空間並使用iptables 執行對NAT表規則的增刪。

故埠轉發的功能API流程可以簡單描述為:

輸入數據為 VPC路由uuid 及埠,私網雲主機IP及埠,生成

VPC路由IP:埠 → 雲主機IP:埠

的一條 DNAT規則。

進入VPC命名空間執行規則。

執行後NAT表效果:

系列下一篇 《深入淺出新一代雲網路——VPC中的那些功能與基於OpenStack Neutron的實現(二)》中將給出上文的簡單API 代碼,並展開另一塊內容——VPC網路帶寬的共享與分離。考慮篇幅, VPC網路中實現互聯互通的路由技術與隧道技術可能會放在系列的第三篇。

不過專欄的下一篇文章可能是雲安全內容,業務與安全搭配,看得不累~

微信:

這兒分享雲計算相關的原創技術實踐和項目經驗,還有各種在雲、雲安全方面搞出的大新聞、趣事兒。
推薦閱讀:

Salesforce 為什麼能夠在 CRM 市場獲得成功?
docker 和 solaris 的 zone 有什麼區別? 為什麼前者比後者有名氣很多?

TAG:OpenStack | SDN | 云计算 |