bridge网络本身不提供绝对隔离,需通过自定义bridge网络、禁用跨网连接、--internal标志、iptables规则及运行时约束等组合机制实现强隔离。

Bridge 网络本身不提供“绝对隔离”,它默认是二层互通的;所谓“绝对隔离”必须靠**显式设计+组合机制**来达成——核心是切断跨网络通信路径,同时消除隐式连通可能。
自定义 bridge 是隔离前提,不是默认 bridge
默认的 bridge 网络(即 docker0)所有未指定网络的容器都会自动加入,IP 可互 ping、无 DNS 但能通,根本谈不上租户隔离。必须弃用它:
- 每个租户独占一个自定义 bridge 网络:
docker network create --driver bridge --subnet 10.10.10.0/24 tenant-a - 禁止容器跨网络 attach:
docker network connect tenant-b container-x这类操作必须严格管控或禁用 - 避免使用
--network host或--network none的混用,否则会绕过 bridge 隔离边界
关闭容器间默认互通能力
即使在同一个自定义 bridge 中,也能进一步收紧:
- 创建时加
--internal标志:docker network create --internal tenant-a-internal,该网络内容器无法访问外网,且外部(包括宿主机)也无法主动访问其端口 - 配合
--ip-range限制可分配 IP 范围,缩小攻击面 - 不启用
com.docker.network.bridge.enable_ip_masquerade=true(默认开启),避免 SNAT 泄露内部拓扑
用 iptables/nftables 做最后一道防线
Linux 内核层面的规则能拦截任何绕过 Docker 网络模型的流量(比如通过 host 网络、或直接操作 veth 接口):
- 在宿主机上为每个租户网络的网桥接口(如
br-xxxx)设置 INPUT/FORWARD 规则,只允许已知 MAC 或 IP 段进出 - 封禁跨网桥转发:
iptables -A FORWARD -i br-tenant-a -o br-tenant-b -j DROP - 禁用网桥间 ARP 通联,防止地址欺骗:
echo 0 > /sys/class/net/br-tenant-a/bridge/forward_delay并关闭 STP
租户容器不共享任何网络基础设施
真正的“绝对”意味着无共享、无隐式通道:
- 不同租户的容器不能挂载相同 hostPath 卷(避免通过文件系统通信)
- 禁用
--pid=host、--ipc=host,防止进程/IPC 命名空间越权窥探 - 宿主机上禁用
net_admin能力给容器,防止其自行修改路由、iptables 或创建新 veth - Docker daemon 启动时配置
--default-ulimit nofile=1024:1024等限制,防资源耗尽型 DoS 影响其他租户
做到以上四点,Bridge 网络就能支撑多租户强隔离场景。它不是靠 Docker 单一功能,而是把命名空间隔离、网桥分治、内核防火墙和运行时约束拧成一股绳。











