首选docker原生overlay网络并启用--opt encrypted参数实现ipsec加密;其次可选calico等cni插件配合networkpolicy与双向tls强化策略控制;同时须关闭非必要端口、禁用特权模式、启用用户命名空间映射及定期轮换token。

要实现 Docker 容器跨宿主机的安全通信,核心是让不同物理机上的容器能像在同一台机器上一样,通过 IP 直接互通,同时保障传输过程不被窃听、篡改或未授权访问。这不是单纯打通网络,而是“可信通信”的构建——既要连得通,也要防得住。
使用 Docker 原生 Overlay 网络(推荐首选)
Overlay 是 Docker Swarm 内置的跨主机网络方案,基于 VXLAN 封装,在 IP 层之上构建逻辑二层网络,天然支持加密和隔离。
- 启用 Swarm 模式后,创建 overlay 网络时加上 --opt encrypted 参数,Docker 会自动启用 IPSec 加密(内核级 AES-GCM),所有节点间的数据帧都会被加密传输;
- 容器分配的 IP 来自独立子网(如 10.0.1.0/24),与宿主机物理网络完全隔离,避免地址冲突和广播泄露;
- 服务发现由 Swarm 内置 DNS 实现,容器可通过服务名互访,无需暴露原始 IP,降低暴露面;
- 注意:所有参与节点必须加入同一个 Swarm 集群,且时间同步、证书信任链完整(Docker 自动管理)。
搭配第三方 CNI 插件强化安全(如 Calico + TLS)
当需要更细粒度策略(如按标签控制流量、双向 mTLS 认证)时,可选用支持策略引擎的 CNI,例如 Calico。
- Calico 支持 NetworkPolicy,可定义类似 Kubernetes 的入站/出站规则(如只允许 service-a 访问 db 的 5432 端口);
- 结合 cert-manager 或 SPIFFE,为每个容器颁发短期 X.509 证书,实现服务间双向 TLS 认证;
- 所有流量经 eBPF 或 iptables 规则强制校验,即使容器被入侵,也无法绕过策略访问其他服务;
- 需配合 etcd 或 Kubernetes API 作为状态存储,不依赖外部注册中心。
限制暴露面 + 主机层加固(基础但关键)
再强的容器网络,若宿主机不设防,也会成为突破口。安全通信必须从底层收敛风险。
- 关闭非必要端口:Overlay 控制面(如 Swarm 的 2377/TCP、7946/UDP、4789/UDP)仅对可信节点开放,用防火墙(如 ufw 或 firewalld)严格限制源 IP;
- 禁用容器特权模式:--privileged=false(默认),避免容器获得宿主机网络栈控制权;
- 启用用户命名空间映射(userns-remap),使容器内 root 映射为宿主机普通用户,即便逃逸也无法直接操作主机网络;
- 定期轮换 Swarm manager token 和 join token,防止长期凭证泄露导致集群接管。
避免高危替代方案
有些“能通”但不安全的做法,应明确规避:
- 纯端口映射(-p)跨主机调用:把容器端口暴露在宿主机公网,等于把内部服务直接挂到互联网,缺乏身份校验和加密;
- Host 网络模式:容器共享宿主机网络栈,失去隔离性,一个容器漏洞即可监听全机流量;
- 手动配置静态路由 + docker0 改网段:虽能互通,但无加密、无策略、无服务发现,且易因 IP 冲突或路由错配导致中断;
- 未加密的 Flannel/VXLAN:Flannel 默认不加密,VXLAN payload 明文传输,中间人可直接解包读取应用数据。











