《Windows容器網絡》要點:
本文介紹了Windows容器網絡,希望對您有用。如果有疑問,可以聯系我們。
前言:下面請允許我激動的介紹Windows容器以及微軟和Docker的合作.我們團隊投入大量資源研發出Windows Server Technical Preview 5容器網絡堆棧,除借鑒Docker的管理經驗外,還研發出Windows容器特有的功能和特性.本文將圍繞Windows容器的網絡堆棧,講述如何使用Docker讓容器網絡連通,以及微軟如何使容器成為基于Microsoft Azure Stack所構建的現代數據中心的一階對象.
Windows容器可應用在不同類型的應用場景下,從運行Node.js的Web服務器到數據庫,再到視頻流.這些應用都需要通過網絡連接實現服務發布.那么Windows容器的網絡堆棧是什么樣子的呢?如何為一個容器分配IP地址或將容器Endpoint連接到網絡?以及如何設置最大網絡帶寬和ACL規則等網絡高級策略呢?
下面通過這張容器網絡堆棧圖(圖1)幫助我們加深理解.
圖1 Windows容器網絡堆棧
所有運行容器的宿主機可以是一臺物理服務器、一個Windows客戶端、或者一臺虛擬機.假如容器宿主已經通過一張NIC卡接入WiFi或以太網實現了網絡連接,并需將網絡連接擴展到容器自身.容器宿主可使用Hyper-V虛擬交換機實現宿主機到容器的連接,并通過Host vNIC(Windows服務器容器)或Synthetic VM NIC (Hyper-V 容器)兩種方式實現容器到vSwitch之間的連接.相比于此,Linux容器技術使用bridge設備而非Hyper-V虛擬交換機,使用veth 偶對而非 vNICs / vmNICs來提供容器間的基礎2層(以太網)連接.
Hyper-V虛擬交換機本身并不允許外網訪問運行在容器內的網絡服務.我們需要3層(IP)連接性來確保數據包能正確路由到目的地.除IP外還需支持更高層的網絡協議,如TCP和UDP協議,通過特定端口號尋址到容器中運行的服務(例如,TCP端口80通常用來訪問WEB服務).為了讓容器更有用,還需在容器中提供4~7層服務,如DNS、DHCP、 HTTP、SMB等.所有以上特性均會在Windows容器網絡中得到支持.
Windows Server Technical Preview 5(TP5)提供了通過Docker客戶端及Dockers引擎RESTful API接口兩種方式安裝容器網絡.網絡配置根據設置的范圍,既可在容器網絡創建時配置也可在容器創建時配置.相關MDSN文章可提供更詳細的信息.
Windows容器網絡管理堆棧使用Docker作為管理入口,并將 Windows宿主網絡服務(Host Network Service ,HNS)作為服務層,用來創建下層網絡(如,vSwitch,WinNAT等)中的“管道”.Docker引擎通過一個網絡插件(libnetwork)實現同HNS的通信.請參考圖2了解管理堆棧.
圖2 管理堆棧
管理堆棧使Docker網絡通過HNS實現同Windows網絡層的插件式對接.因為創建過程的自動化,用戶無需自己設置靜態端口映射或防火墻策略(如NAT轉換).
注意:NetNatStaticMapping (及防火墻策略)都將自創創建
Windows容器的網絡連接有四種不同的網絡模式(或驅動).不同模式的選擇取決于容器如何被外網客戶端訪問,IP地址如何分配,網絡策略如何執行等因素.
每種網絡模式都將使用內部或外部虛擬交換機(由HNS自動創建)來打通容器到容器宿主的物理(或虛擬)網絡.下面就四種模式以下給出使用建議.關于每種模式的詳細信息請到MDSN文章(https://msdn.microsoft.com/virtualization/windowscontainers/management/container_networking)中查找.
注: Windows Server 2016 或者Windows 10 客戶端不再支持NAT 虛擬交換模式創建.NAT容器網絡可通過在Docker中設定nat驅動或者在PowerShell環境下運行NAT模式來創建.
請注意虛擬交換和NetNat如何被自動創建.
容器逐步成為數據中心和企業的一階實體,同虛擬機相提并論.而IaaS云租戶或企業業務部門需要同時支持虛擬網卡和容器Endpoint兩種模式下,程序化地定義網絡策略(如ACLs、QoS、負載均衡等).Windows Server 2016 版本的軟件定義的網絡(SDN)堆棧支持客戶在Windows Network Controller使用PowerShell 腳本、SCVMM或微軟 Azure Stack新出的Azure Portal 為容器Endpoint 定義網絡策略.
在虛擬化環境下,容器宿主可以是一臺物理服務器上的虛擬機.Network Controller通過標準的SouthBound 通道(如OVSDB)發送策略給運行在物理服務器上的宿主Agent,宿主Agent將策略傳入物理服務器的vSwitch的VFP進行執行.由于網絡策略是特定于具體某個IP地址(如,容器Endpoint)的,當多個容器Endpoint被連接到同一張容器宿主網卡時,網絡策略仍然可以被細粒度地定義.
L2 Tunnel網絡模式下,所有容器宿主虛擬機的網絡流量都將通過物理服務器的vSwitch收發,vSwitch 上的VFP轉發擴展將會執行從Network Controller 以及Azure Stack中的高層組件(如Network Resource Provider、Azure Resource Manager、Azure Portal)接收到的網絡策略.堆棧架構請參考圖3.
圖3 容器實現同SDN疊加虛擬網的連接
這樣容器可以加入由獨立云租戶創建的疊加虛擬網(如,VxLAN),實現跨節點集群內的通信以及同其他虛擬機的通信,還可以接收網絡策略.
未來我們不僅會在Windows操作系統上不斷創新,更會貢獻更多的代碼到GitHub的Docker 開源項目上.我們希望Windows的容器使用者可以使用到更加豐富的網絡策略,并通過容器客戶端來創建網絡策略.我們也希望將網絡策略的執行盡可能的更靠近容器Endpoint,來縮減數據路徑,提升網絡吞吐,降低網絡時延.
感謝滕啟明對文章的審校.
譯/Chilly
原文出處——Docker微信公眾號
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4520.html