网络隔离和安全性
适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016
使用网络命名空间的隔离
每个容器终结点放置在其自己的 网络命名空间中。 管理主机虚拟网络适配器和主机网络堆栈位于默认网络命名空间中。 若要在同一主机上强制实施容器之间的网络隔离,会为每个 Windows Server 容器创建一个网络命名空间,并且容器在安装容器的网络适配器 Hyper-V 隔离下运行。 Windows Server 容器使用主机虚拟网络适配器附加到虚拟交换机。 Hyper-V 隔离使用合成 VM 网络适配器(未向实用工具 VM 公开)连接到虚拟交换机。
使用综合 VM 网络适配器Hyper-V 隔离
运行以下 PowerShell cmdlet 以获取协议堆栈中的所有网络隔离区:
Get-NetCompartment
网络安全
根据所使用的容器和网络驱动程序,端口 ACL 的强制执行是通过 Windows 防火墙与 Azure 虚拟筛选平台(VFP)的结合来实现的。
Windows Server 容器
以下值使用 Windows 主机的防火墙(通过网络命名空间启发)以及 VFP:
- 默认出站:全部允许
- 默认入站:允许所有(TCP、UDP、ICMP、IGMP)未请求的网络流量
- 拒绝所有不属于这些协议的其他网络流量
注意
在 Windows Server 版本 1709 和 Windows 10 Fall Creators Update 之前,默认入站规则为全部拒绝。 运行这些旧版本的用户可以使用 docker run -p
(端口转移)创建入站允许规则。
Hyper-V 隔离
在 Hyper-V 隔离中运行的容器有自己的隔离内核,因此,使用以下配置运行自己的 Windows 防火墙实例:
- 在 Windows 防火墙(在实用工具 VM 中运行)和 VFP 中默认设置为 ALLOW ALL。
使用防火墙Hyper-V 隔离
Kubernetes Pod
在 Kubernetes pod中,首先创建一个基础结构容器,然后将端点附加到该容器上。 属于同一 Pod 的容器(包括基础结构容器和辅助角色容器)共享一个通用网络命名空间(如相同的 IP 和端口空间)。
自定义默认端口 ACL
如果要修改默认端口 ACL,请在更改端口之前查看 主机网络服务 主题。 需要更新以下组件内的策略:
注意
对于透明模式和 NAT 模式下的 Hyper-V 隔离,目前无法重新配置默认端口 ACL,下表中的“X”反映了这一点:
网络驱动程序 | Windows Server 容器 | Hyper-V 隔离 |
---|---|---|
透明 | Windows 防火墙 | X |
NAT | Windows 防火墙 | X |
L2Bridge | 两者 | VFP |
L2Tunnel | 两者 | VFP |
覆盖 | 两者 | VFP |