操作
基於軟體容器網路對NAT的依賴以及NAT自身的局限性,網路工程師在其基礎設施內部署容器時面臨一些顯著的挑戰,但通過了解容器主機如何支持NAT模式可幫助我們避免這些問題。
首先,讓我們看看主機如何創建新的網路命名空間(這在概念上類似於MPLS/VPN模型中的虛擬路由和轉發實例)以及被稱為虛擬乙太網(vEth)的特殊網路接口。vEth接口是用於連線命名空間的一對端點,主機將vEth的一端放在默認命名空間用於與外部世界通信,另一端放在新創建的命名空間。
默認命名空間中的vEth被綁定到橋接,例如Docker中的docker0以及LXC中的lxcbr0。主機使用Linux中的iptables來配置NAT以及輕量級動態主機配置協定(DHCP)伺服器來分配地址,例如dnsmasq。
規避NAT
幸運的是,我們有技術可避免NAT。Cohesive Networks公司首席技術官Chris Swan在2014年Container Camp會議中談論Docker網路時將其容器網路哲學恰當地總結為讓容器成為“網路的一等公民”。
我們可以直接連線容器到主機的網路接口來實現這一點。容器與主機共享本地區域網路(LAN),它們從LAN的DHCP伺服器獲取IPv4地址或者使用靜態機制。所有4層網路連線埠完全暴露,雖然這種直接的暴露比管理映射連線埠更好,但維持強大的安全狀態需要紀律性。
直接連線到物理接口的一種方法是橋接vEth端點與面向網際網路的物理接口。不過,這種方法需要修改物理連線埠,即移除IP位址並將其分配到橋接接口。
系統管理員可使用混淆命名的“macvlan”網路類型來連線到物理接口,而不需要使用vEth網路類型。Macvlan類型與IEEE 802.1Q VLAN無關;它可被認為復用多個MAC地址到單個網路接口的方法。Macvlan類型通常部署在橋接模式,實現更簡單的橋接,而非傳統的學習橋接—不需要學習,生成樹協定也沒必要。
消除NAT的第二種方法是將主機變成全面的路由器,甚至是使用邊界網關協定的路由器。主機會將前綴路由到主機中的容器,每個容器會使用全球唯一的IP位址。在即將耗盡的IPv 4地址空間時代,提供IPv4獨特地址顯然不太現實。而IPv6讓這種主機作為路由器的技術更加簡潔;該協定的稀疏定址模式允許巨大的易於管理的地址空間。
由於3層網路不會受到洪泛影響,它的使用消除了2層網路廣播域中創建的大量故障域。你是否經歷過數據中心範圍的網路危機?單個乙太網廣播域幾乎肯定遭遇過生成樹故障或者其他洪泛相關的事件。
部署容器網路策略的關鍵角色
儘管Docker已經滿足了開發人員的使用要求,但容器網路要在大多數企業中輕鬆部署還有很長的路要走。與其他套用開發框架一樣,開發人員的需求與企業運營團隊的需求有所不同。
就在企業中部署容器網路而言,網路連通性及安全性必須是可管理的。容器網路部分同樣可程式對於保持容器的可程式性至關重要。VMware有一個可程式容器網路產品NSX;這很可能是VMware用於管理容器網路的工具。
簡單來講,容器網路是一個可執行程式,運行在作業系統中的一個隔離的檔案系統之上。作業系統一般是Linux,位於虛擬機中或者專用物理硬體之上。計算機能夠運行多個容器,每個容器網路擁有單獨的檔案系統。所有的容器網路共享底層計算機的資源,比如CPU、記憶體以及磁碟、網路。
容器網路考慮了雲級別套用
Docker已經套用於雲服務中,單個套用可能有成百上千個連線。對於很多易於部署的容器網路來說,容器網路之間不需要進行大量的隔離。單台計算機之上的所有容器網路往往屬於相同套用的一部分。單個套用可能是由稱之為微服務的多個不同的小程式組成的。很可能有幾十個微服務而且每個微服務可能需要幾十個乃至上千個實例。結果是運行一個套用可能需要多個很多容器。
在雲套用中,交付一個套用可能需要運行上千個容器網路實例的上百台伺服器。在這種情況下通過一組計算機交付一個套用,而且每個套用有單獨的伺服器都是有意義的。容器網路安全往往部署於套用的邊界。
容器網路共享帶來了問題
在較小的規模內,多個套用共享一組伺服器可能是有必要的。既然套用很可能只有數百個用戶使用,那么實例的數量可能更小。如果每個套用只需要很少的容器網路實例,那么向套用交付硬體將會限制靈活性。對企業用戶而言,很可能很多套用的容器網路是融合在一起。
現在,需要在可能共用一個主機的容器網路之間提供隔離,因為容器網路可能是不同套用的組成部分。面向消費者的訂購網站需要與企業資源規劃及工資單套用相隔離。這將需要一台防火牆,能識別出運行在一台主機之上的容器網路之間的差異。我們已經看到NSX能夠針對運行在一台虛擬機之上的不同套用設定不同的防火牆策略。NSX應該能夠識別出運行在容器網路內的套用並針對每個套用設定不同的策略。
容器網路安全可程式性是關鍵
容器網路最大的價值之一是其波動性。新容器實例可以由套用創建、刪除。網站繁忙時,套用能夠創建多個Web伺服器容器網路。網站訪問量小時,可以刪除這些容器網路。可伸縮性應該由應用程式自動實現。波動性對任何人工過程,尤其是安全過程來說是一個挑戰。為適應容器網路的波動性,需要採用編程方式創建、銷毀容器,安全工具必須是可程式的。增加Web伺服器的容器網路時,安全工具應該增加規則,允許訪問該容器網路。軟體定義的網路對新套用是至關重要的。套用擴展時直接聯繫NSX並指導面向容器網路的防火牆策略創建,應該是相當簡單的事兒。
VMware一直恪守承諾,通過開發項目Lightwave和Photon,為基於微服務的架構提供基礎設施。 Lightware提供了身份認證,對允許哪些容器運行在環境中進行控制。與NSX集成將允許安全規則用於支撐與套用相關的一組容器。
VMware似乎期望容器網路隔離能夠通過在每個虛擬機內運行單個容器的方式實現。這使用了VMFork技術—曾經被稱為Project Fargo—使虛擬機創建與容器網路一樣快。VMFork解決了容器網路所需要的檔案系統安全性,但並未解決網路配置與安全性。VMware仍舊需要NSX交付基於策略的連線性與安全性。
VMware致力於在企業中推廣基於容器網路的套用。我希望NSX成為虛擬化基礎設施中可程式基礎設施的頂樑柱。