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 中的進階網路選項