Windows 容器的網路概念
標準 Windows 電腦中的處理器具有 核心模式 和 使用者模式。 核心作系統元件和大部分設備驅動器會在核心模式中執行,而應用程式會在使用者模式中執行。 當您在計算機上實作容器時,每個容器都會建立隔離且輕量型的環境,以在主機 OS 上執行應用程式。 容器會共用大部分主機 OS 核心,以存取文件系統和登錄。
Windows 容器需要容器 OS。 容器取決於作系統核心來管理文件系統、網路、進程排程和記憶體管理等服務。 容器OS是封裝運行時間一部分的OS。 您可以使用不同版本的 Windows 搭配您的容器,以存取特定 OS 功能或其他必要軟體。
網路隔離和安全性
Windows 容器支援兩種類型的運行時間隔離: 進程 和 Hyper-V。 主要差異在於容器、主機OS和主機上其他容器之間所建立的隔離程度。
進程隔離是最常見的方法。 在相同主機上執行的多個容器實例會透過命名空間和資源控制設定,以及其他進程隔離函式來達成隔離。
- 每個容器都會與主機上的主機 OS 和其他容器共用相同的核心。
- 每個容器都有連線到虛擬交換器的虛擬網路適配器。
- 每個容器端點都會放在自己的網路命名空間中。 默認網路命名空間是主機虛擬網路適配器和主機網路堆疊的位置。
Hyper-V 隔離提供主機和容器之間增強的安全性和更廣泛的相容性。 多個容器實例會在相同的主機上執行,但每個容器都會在優化的虛擬機中執行。 虛擬機提供每個容器與容器主機之間的硬體層級隔離。
- 每個容器基本上都有自己的核心。
- 若要在主機上的容器之間強制執行網路隔離,系統會為每個容器建立網路命名空間。
- 容器在 Hyper-V 隔離狀態下運行,並在其上安裝虛擬網路適配器。 Windows Server 容器會使用主機虛擬網路適配器來連結至虛擬交換器。 Hyper-V 隔離會使用綜合虛擬機網路介面卡 (未公開至公用程式虛擬機器) 來連結至虛擬交換器。
使用主機網路服務進行網路管理 (HNS)
Windows 使用主機網路服務 (HNS) 和主機計算服務 (HCS) 來建立容器,並將端點連結至網路。
- 網路:HNS 會為每個網路建立 Hyper-V 虛擬交換器,HNS 會建立必要的 NAT 和IP集區。
- 端點:HNS 會為每個容器端點建立網路命名空間,而 HNS/HCS 會將虛擬網路適配器新增至命名空間。 HNS 會建立虛擬交換器埠。 HNS 會根據設定的網路驅動程式模式,將IP位址、功能變數名稱系統 (DNS) 資訊、路由等指派給端點。
- 政策:針對預設 NAT 網路,HNS 會建立 WinNAT 埠轉送規則和對應映射,並採用相應的 Windows 防火牆允許規則。 對於所有其他網路,HNS 會使用虛擬篩選平臺 (VFP) 來建立負載平衡、ACL 和封裝的原則。
防火牆互動
根據您的容器組態和網路驅動程序類型,埠 ACL 會由 Windows 防火牆和 Azure 虛擬篩選平臺 (VFP) 的組合強制執行。 下列值會使用 Windows 主機的防火牆 (以網路命名空間啟用) 和 VFP:
- 預設輸出:ALLOW ALL。
- 預設輸入:ALLOW ALL (TCP, UDP, ICMP, IGMP) 未經請求的網路流量。 拒絕所有不屬於這些通訊協定的其他網路流量。
網路驅動程式
Windows 支援 Docker 容器的五種不同的網路驅動程式或模式:NAT、Transparent、Overlay、L2Bridge 和 L2Tunnel。 除了 Docker 在 Windows 上建立的預設 NAT 網路之外,您也可以使用 docker network create
Docker CLI 中的 命令來定義自定義容器網路。
下表摘要說明 Windows 上 Docker 容器可用的網路驅動程序類型。 選擇符合實體網路基礎結構和主機(單一或多個節點)組態需求的網路驅動程式。
網路驅動程式 | 一般用途 | 容器對容器 (單一節點) | 容器對外部 (單一節點 + 多節點) | 容器對容器 (多節點) |
---|---|---|---|---|
NAT (預設值) | 適用於開發人員 | 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線 跨子網:不支援 (只有一個 NAT 內部前置詞) |
透過管理虛擬網路介面卡路由傳送 (繫結至 WinNAT) | 不直接支援:需要透過主機開放埠口 |
透明 | 適用於開發人員或小型部署 | 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線 跨子網:透過容器主機進行路由。 |
透過具有直接存取實體網路適配器的容器主機進行路由 | 透過具有直接存取實體網路適配器的容器主機進行路由 |
覆蓋層 | 適用於多節點; 對於 Docker Swarm 是必需的,但在 Kubernetes 中可用 | 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線 跨子網:網路流量會封裝並透過管理虛擬網路適配器進行路由傳送。 |
不直接支援 - 需要將第二個容器端點連接到 Windows Server 2016 上的 NAT 網路,或在 Windows Server 2019 上設定 VFP NAT 規則。 | 相同/跨子網路:網路流量會使用 VXLAN 封裝並透過管理虛擬網路介面卡進行路由傳送 |
L2Bridge | 用於 Kubernetes 和 Microsoft 軟體設計網路 (SDN) | 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線 跨子網:容器 MAC 位址會在輸入和輸出和路由上重寫。 |
容器 MAC 位址 | |
在輸入和輸出上重新寫入 | 相同子網路:橋接連線 跨子網:透過 WSv1809 和更新版本管理虛擬網路介面卡路由傳送 |
|||
L2Tunnel | 僅限 Azure | 相同/跨子網路:釘選至套用原則所在的實體主機 Hyper-V 虛擬交換器。 | 流量必須通過 Azure 虛擬網路閘道 | 相同/跨子網:重定向到實體主機 Hyper-V 虛擬交換器應用政策的位置 |
進階網路選項
您可以利用數個適用於 Windows 特定功能和特色的網路驅動程式選項。 以下是一些範例:
- 為 Windows 容器指定多個網路介面卡,以存取容器主機網路的交換器內嵌小組。
- 設定網路的 VLAN 識別碼,為連結至網路的任何容器端點設定 VLAN 隔離。
- 指定網路的 輸出NAT 原則,以允許容器存取外部世界。
如需詳細資訊,請參閱 Windows 中的進階網路選項。