Windows 容器網路驅動程式

適用于:Windows Server 2022、Windows Server 2019、Windows Server 2016

使用者除了可以在 Windows 上運用 Docker 建立的預設 'nat' 網路,也可以定義自訂容器網路。 您可以使用 Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME> 命令來建立使用者定義的網路。 在 Windows 上,可使用下列網路驅動程式類型:

NAT 網路驅動程式

連結至使用 'nat' 驅動程式所建立網路的容器會連線到 內部 Hyper-V 交換器,並從使用者指定的 () --subnet IP 前置詞接收 IP 位址。 支援從容器主機到容器端點的連接埠轉送/對應。

提示

您可以透過 fixed-cidrDocker 精靈組態檔中的 設定,自訂預設 'nat' 網路所使用的子網。

注意

在 Windows Server 2019 (或更新版本上建立的 NAT 網路,在重新開機後將不再保存) 。

建立 NAT 網路

若要使用子網 10.244.0.0/24 建立新的 NAT 網路:

docker network create -d "nat" --subnet "10.244.0.0/24" my_nat

透明網路驅動程式

連結至使用「透明」驅動程式所建立網路的容器,將會透過 外部 Hyper-V 交換器直接連線到實體網路。 實體網路的 IP 可以透過外部 DHCP 伺服器,以靜態 (需要使用者指定的 --subnet 選項) 或動態方式指派。

注意

由於下列需求,Azure VM 不支援透過透明網路連線您的容器主機。

需要:當此模式用於虛擬化案例時,容器主機 (需要 VM) MAC 位址詐騙

建立透明網路

若要使用子網 10.244.0.0/24 、閘道 10.244.0.1 、DNS 伺服器 10.244.0.7 和 VLAN 識別碼 7 建立新的透明網路:

docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent

重迭網路驅動程式

容器協調器經常使用,例如 Docker Swarm 和 Kubernetes,附加至重迭網路的容器可以與跨多個容器主機連結至相同網路的其他容器通訊。 每個重迭網路都是使用自己的 IP 子網建立,由私人 IP 首碼所定義。 重迭網路驅動程式會使用 VXLAN 封裝來達到租使用者容器網路之間的網路流量隔離,並啟用跨重迭網路重複使用 IP 位址。

需要:請確定您的環境符合建立重迭網路所需的 必要條件

需要:在 Windows Server 2019 上,這需要KB4489899。

需要:在Windows Server 2016上,這需要KB4015217

注意

在 Windows Server 2019 和更新版本上,Docker Swarm 所建立的重迭網路會利用 VFP NAT 規則來進行輸出連線。 這表示指定的容器會收到 1 個 IP 位址。 這也表示 ICMP 型工具,例如 pingTest-NetConnection 應該在偵錯情況下使用其 TCP/UDP 選項來設定。

建立重迭網路

若要使用子網 10.244.0.0/24 、DNS 伺服器 168.63.129.16 和 VSID 4096 建立新的重迭網路:

docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay

L2bridge 網路驅動程式

連結至使用 'l2bridge' 驅動程式所建立網路的容器,將會透過 外部 Hyper-V 交換器連線到實體網路。 在 l2bridge 中,容器網路流量將具有與主機相同的 MAC 位址,因為第 2 層位址轉換 (MAC 在輸入和輸出上重新寫入) 作業。 在資料中心,這有助於減輕交換器需要瞭解有時短期容器 MAC 位址的壓力。 L2bridge 網路可以透過 2 種不同的方式進行設定:

  1. L2bridge 網路已設定與容器主機相同的 IP 子網
  2. L2bridge 網路已設定為新的自訂 IP 子網

在組態 2 中,使用者必須在作為閘道的主機網路區間上新增端點,並設定指定前置詞的路由功能。

建立 l2bridge 網路

若要使用子網 10.244.0.0/24 、閘道 10.244.0.1 、DNS 伺服器 10.244.0.7 和 VLAN 識別碼 7 建立新的 l2bridge 網路:

docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge

提示

L2bridge 網路可高度程式化;如需有關如何設定 l2bridge 的詳細資訊,請參閱 這裡

L2tunnel 網路驅動程式

建立與 l2bridge 相同,不過 此驅動程式應該只用于 Microsoft Cloud Stack (Azure) 。 l2bridge 的唯一差異在於,所有容器流量都會傳送至套用 SDN 原則的虛擬化主機,進而啟用適用于容器的 Azure 網路安全性群組 等功能。

網路拓撲和 IPAM

下表顯示如何針對每一種網路驅動程式的內部 (容器對容器) 和外部連接提供網路連線。

網路模式/Docker 驅動程式

Docker Windows 網路驅動程式 典型的使用案例 容器對容器 (單一節點) 容器對外部 (單一節點 + 多節點) 容器對容器 (多節點)
NAT (預設) 適用於開發人員
  • 相同子網路:透過 Hyper-V 虛擬交換器橋接的連線
  • 跨子網:不支援只 (一個 NAT 內部前置詞)
透過管理 vNIC 路由 (繫結至 WinNAT) 不直接支援:需要透過主機公開連接埠
透明 適用於開發人員或小型部署
  • 相同子網路:透過 Hyper-V 虛擬交換器橋接的連線
  • 跨子網路:透過容器主機路由
透過容器主機以及直接存取 (實體) 網路介面卡來路由 透過容器主機以及直接存取 (實體) 網路介面卡來路由
覆蓋 適用于多節點;Docker Swarm 的必要專案,可在 Kubernetes 中使用
  • 相同子網路:透過 Hyper-V 虛擬交換器橋接的連線
  • 跨子網路:網路流量透過 Mgmt vNIC 封裝和路由
不支援 - 需要在 Windows Server 2019 上Windows Server 2016或 VFP NAT 規則上附加至 NAT 網路的第二個容器端點。 相同/跨子網路:使用 VXLAN 封裝網路流量,並透過 Mgmt vNIC 路由
L2Bridge 用於 Kubernetes 與 Microsoft SDN
  • 相同子網路:透過 Hyper-V 虛擬交換器橋接的連線
  • 跨子網路:容器 MAC 位址在輸入和輸出時會重寫並路由
容器 MAC 位址在輸入和輸出時會重寫
  • 相同子網路:橋接的連線
  • 跨子網:透過 WSv1809 和更新版本上的 Mgmt vNIC 路由傳送
L2Tunnel 僅限 Azure 相同/跨子網路:釘選到套用原則之實體主機的 Hyper-V 虛擬交換器 流量必須通過 Azure 虛擬網路閘道 相同/跨子網路:釘選到套用原則之實體主機的 Hyper-V 虛擬交換器

IPAM

針對每一種網路驅動程式,配置及指派 IP 位址的方式各不相同。 Windows 會使用主機網路服務 (HNS) 來為 nat 驅動程式提供 IPAM,並以 Docker 群集模式 (內部 KVS) 來為 overlay 驅動程式提供 IPAM。 所有其他網路驅動程式皆使用外部 IPAM。

網路模式/驅動程式 IPAM
NAT 主機網路服務從內部 NAT 子網首碼 (HNS) 動態 IP 配置和指派
透明 靜態或動態 (使用外部 DHCP 伺服器) IP 配置並從容器主機網路首碼中的 IP 位址指派
重疊 來自 Docker 引擎群集模式受管理首碼的動態 IP 配置並透過 HNS 指派
L2Bridge 主機網路服務從提供的子網前置詞 (HNS) 動態 IP 配置和指派
L2Tunnel 僅限 Azure - 動態 IP 配置並透過外掛程式指派

服務探索

只有某些 Windows 網路驅動程式可支援服務探索。

驅動程式名稱 本機服務探索 全域服務探索
nat YES 是,使用 Docker EE
overlay YES 是搭配 Docker EE 或 kube-dns
透明
l2bridge 是搭配 kube-dns 是搭配 kube-dns