虚拟交换技术是容器网络隔离的核心支撑,它通过docker0网桥与独立网络命名空间协同,实现二层转发与策略控制入口;默认bridge仅提供基础隔离,自定义bridge启用dns和子网管理,结合iptables/nftables钩子及cni插件(如calico、cilium)可构建策略感知的智能交换层。

虚拟交换技术是容器网络隔离的核心支撑,它不单是“连通”的工具,而是实现安全边界的关键执行层。真正起作用的不是交换机本身,而是它如何与命名空间、策略规则和底层内核机制协同工作。
用好 Docker bridge 网络这个基础虚拟交换环境
Docker 默认的 bridge 模式本质就是一个由内核 docker0 网桥驱动的轻量级虚拟交换环境。它的隔离能力来自两层:一是每个容器运行在独立网络命名空间中,二是所有流量必须经过网桥转发,这为拦截和控制提供了天然入口。
- 默认 bridge(如
docker0)不支持容器名解析,也不允许跨容器直接通信——这是默认安全基线 - 自定义 bridge 网络才是可控隔离的起点:它启用内置 DNS、支持用户定义子网,并可禁用外部访问
- 创建时加
--internal参数,让网络完全不对外 NAT,只允许内部容器互访
通过 iptables/nftables 在虚拟交换路径上做精细过滤
网桥本身不处理三层策略,但 Linux 内核在网桥转发路径上预留了 ebtables(二层)、iptables(三层)和 nftables(统一框架)钩子。你可以在容器进出网桥的瞬间控制流量。
- 容器出向流量经过
FORWARD链,可用-s 容器IP -d 外部IP限制外联目标 - 容器入向流量走
DOCKER-USER链(Docker 保留链),在此添加拒绝规则不会被 Docker 自动覆盖 - 例如禁止某容器访问 Redis 端口:
iptables -I DOCKER-USER -s 172.18.0.5 -d 10.0.0.0/8 -p tcp --dport 6379 -j DROP
结合 CNI 插件升级虚拟交换能力
当单机 bridge 不够用,比如要跨主机、要策略可视化、要加密或要服务网格集成,就得引入专业 CNI 插件。它们不是替代网桥,而是在网桥之上构建更智能的“策略感知交换层”。
-
Calico 把每个容器当作 BGP 路由节点,用网络策略直接编译成内核
iptables或 eBPF 规则,毫秒级生效 - Cilium 基于 eBPF,在 socket 层和 XDP 层拦截流量,支持 L7 协议识别(如 HTTP path、gRPC method)
- 部署后,一条
NetworkPolicy就能精准控制“frontend 容器只能调 backend 的 /api/v1/users 接口”,传统网桥做不到
避免常见虚拟交换误操作
很多“隔离失效”其实源于对虚拟交换边界的误解:
- 不要在
host模式下谈网络隔离——此时没有网桥,容器直接用宿主机协议栈,策略需全靠主机防火墙 - 自定义 bridge 网络里,容器默认仍可通过网桥互通;若需进一步分组,应拆分为多个网络,而非依赖同一网桥内的 ACL
-
none模式虽彻底断网,但无法用于任何需要通信的场景;真正需要的是“可控通信”,不是“全关”











