Windows 容器的網路概念

已完成

標準 Windows 電腦中的處理器有核心模式和使用者模式。 核心 OS 元件和大部分的裝置驅動程式都是以核心模式執行,而應用程式則是以使用者模式執行。 當您在電腦上實作容器時,每個容器都會建立隔離且輕量型的環境,以在主機 OS 上執行應用程式。 容器會共用大部分主機 OS 核心,以存取檔案系統和登錄。

Windows 容器需要容器 OS。 容器相依於 OS 核心來管理如下的服務:檔案系統、網路、流程排程及記憶體管理。 容器 OS 是屬於已封裝執行階段一部分的 OS。 您可以使用不同版本的 Windows 搭配您的容器,以存取特定 OS 功能或其他必要軟體。

網路隔離和安全性

Windows 容器支援兩種類型的執行階段隔離:流程和 Hyper-V。 主要差異在於容器、主機 OS 和主機上其他容器之間所建立的隔離程度。

流程隔離是最常見的方法。 在相同主機上執行的多個容器執行個體會透過命名空間和資源控制設定,以及其他流程隔離函式來達成隔離。

  • 每個容器都會與主機上的主機 OS 和其他容器共用相同的核心。
  • 每個容器都有連線到虛擬交換器的虛擬網路介面卡。
  • 每個容器端點都會放在自己的網路命名空間中。 預設網路命名空間是主機虛擬網路介面卡和主機網路堆疊的位置。

Hyper-V 隔離提供主機和容器之間增強的安全性和更廣泛的相容性。 多個容器執行個體會在相同的主機上執行,但每個容器都會在最佳化的虛擬機器中執行。 虛擬機器可為每個容器與容器主機之間提供硬體等級的隔離。

  • 每個容器基本上都有自己的核心。
  • 若要在主機上的容器之間強制執行網路隔離,系統會為每個容器建立網路命名空間。
  • 容器會在 Hyper-V 隔離下執行,其中安裝了容器的虛擬網路介面卡。 Windows Server 容器會使用主機虛擬網路介面卡來連結至虛擬交換器。 Hyper-V 隔離會使用綜合虛擬機網路介面卡 (未公開至公用程式虛擬機器) 來連結至虛擬交換器。

Diagram showing how the virtual machine provides hardware-level isolation between each container and the container host.

使用主機網路服務 (HNS) 進行網路管理

Windows 使用主機網路服務 (HNS) 和主機計算服務 (HCS) 來建立容器,並將端點連結至網路。

  • 網路:HNS 會為每個網路建立 Hyper-V 虛擬交換器,而 HNS 會建立必要的 NAT 和 IP 集區。
  • 端點:HNS 會為每個容器端點建立網路命名空間,而 HNS/HCS 會將虛擬網路介面卡新增至命名空間。 HNS 會建立虛擬交換器連接埠。 HNS 會根據設定的網路驅動程式模式,將 IP 位址、網域名稱系統 (DNS) 資訊、路由等指派給端點。
  • 原則:針對預設 NAT 網路,HNS 會使用對應的 Windows 防火牆 ALLOW 規則建立 WinNAT 連接埠轉送規則和對應。 對於所有其他網路,HNS 會使用虛擬篩選平台 (VFP) 來建立負載平衡、ACL 和封裝的原則。

防火牆互動

根據您的容器設定和網路驅動程序類型,連接埠 ACL 會由 Windows 防火牆和 Azure 虛擬篩選平台 (VFP) 的組合強制執行。 下列值會使用 Windows 主機的防火牆 (以網路命名空間啟用) 和 VFP:

  • 預設輸出:ALLOW ALL。
  • 預設輸入:ALLOW ALL (TCP, UDP, ICMP, IGMP) 未經請求的網路流量。 DENY ALL 所有其他不是來自這些通訊協定的網路流量。

網路驅動程式

Windows 支援 Docker 容器五種不同的網路驅動程式或模式:NAT、Transparent、Overlay、L2Bridge 和 L2Tunnel。 除了 Docker 在 Windows 上建立的預設 NAT 網路之外,您也可以使用 Docker CLI 中的 docker network create 命令來定義自訂容器網路。

下表摘要說明 Windows 上 Docker 容器可用的網路驅動程式類型。 選擇符合實體網路基礎結構和主機 (單一或多個節點) 設定需求的網路驅動程式。

網路驅動程式 一般用法 容器至容器 (單一節點) 容器至外部 (單一節點 + 多節點) 容器至容器 (多節點)
NAT (預設) 適用於開發人員 相同子網路:透過 Hyper-V 虛擬交換器進行橋接連線

跨子網路:不支援 (只有一個 NAT 內部前置詞)
透過管理虛擬網路介面卡路由傳送 (繫結至 WinNAT) 不直接支援:需要透過主機公開連接埠
透明 適用於開發人員或小型部署 相同子網路:透過 Hyper-V 虛擬交換器進行橋接連線

跨子網路:透過容器主機路由傳送。
透過直接存取 (實體) 網路介面卡的容器主機路由傳送 透過直接存取 (實體) 網路介面卡的容器主機路由傳送
Overlay 適用於多節點;Docker Swarm 所需,Kubernetes 中提供 相同子網路:透過 Hyper-V 虛擬交換器進行橋接連線

跨子網路:網路流量會經過封裝並透過管理虛擬網路介面卡進行路由傳送。
不直接支援 - 需要附加至 Windows Server 2016 上 NAT 網路的第二個容器端點,或 Windows Server 2019 上的 VFP NAT 規則。 相同/跨子網路:網路流量會使用 VXLAN 封裝並透過管理虛擬網路介面卡進行路由傳送
L2Bridge 用於 Kube 和 Microsoft 軟體設計網路 (SDN) 相同子網路:透過 Hyper-V 虛擬交換器進行橋接連線

跨子網路:在輸入和輸出和路由上重新寫入容器 MAC 位址。
容器 MAC 位址
在輸入和輸出上重新寫入 相同子網路:橋接連線

跨子網:透過 WSv1809 和更新版本管理虛擬網路介面卡路由傳送
L2Tunnel 僅限 Azure 相同/跨子網路:釘選至套用原則所在的實體主機 Hyper-V 虛擬交換器。 流量必須通過 Azure 虛擬網路閘道 相同/跨子網路:釘選至套用原則所在的實體主機 Hyper-V 虛擬交換器

進階網路選項

您可以利用 Windows 特定功能和特性的數個網路驅動程式選項。 以下列出一些範例:

  • 為 Windows 容器指定多個網路介面卡,以存取容器主機網路的交換器內嵌小組。
  • 設定網路的 VLAN 識別碼,為連結至網路的任何容器端點設定 VLAN 隔離。
  • 指定網路的 OutboundNAT 原則,以允許容器存取外部世界。

如需詳細資訊,請參閱 Windows 中的進階網路選項