必须在 swarm 模式下创建 overlay 网络并指定 --opt encrypted 参数启用 ipsec 加密,依赖 docker ≥20.10、内核支持 xfrm/esp 及节点时间同步。
要在 docker 中配置带加密的跨主机 overlay 通信链路,核心是启用 ipsec 加密 —— 这是 docker 原生 overlay 网络唯一支持的链路层加密方式。它默认不开启,需在创建网络时显式指定 --opt encrypted 参数,且必须运行在 swarm mode 下。
确保 Swarm 集群已就绪并满足加密前提
加密 Overlay 网络不是独立功能,而是 Swarm Overlay 的可选增强。以下条件缺一不可:
- Docker 版本 ≥ 20.10(推荐 24.0+),内核需启用
CONFIG_XFRM_USER和CONFIG_INET_ESP(主流发行版默认已开) - 所有节点时间同步误差 chronyd -q 或
timedatectl status验证) - 防火墙放行:TCP 2377(Swarm 管理)、TCP/UDP 7946(控制面)、UDP 4789(VXLAN 数据面)——加密不新增端口
- 节点间物理网络支持 UDP 分片重组(避免因 MTU 不匹配导致加密握手失败)
创建加密的 Overlay 网络
在任意 manager 节点执行以下命令:
docker network create -d overlay \ --opt encrypted \ --attachable \ my-secure-overlay
关键说明:
-
--opt encrypted是启用 IPsec 的唯一开关,底层使用 Linux Kernel 的 ESP(Encapsulating Security Payload)协议,自动协商密钥,无需手动管理证书或预共享密钥 -
--attachable保留调试能力,允许后续用docker run --network my-secure-overlay启动临时容器验证 - 网络创建后,Docker 自动在各节点部署 IPsec SA(Security Association),可通过
ip xfrm state查看加密通道
验证加密是否生效
不能只测连通性,要确认流量实际被加密:
- 在 client 容器中执行:
ping -c 3 <server></server>,然后在 server 主机上抓包:tcpdump -i any port 4789 -nn - 若看到 UDP 负载为乱码(非明文 ICMP 报文),说明 VXLAN 封包已被 IPsec 加密;若能看到
ICMP echo request明文,则加密未启用或被绕过 - 检查加密状态:
docker network inspect my-secure-overlay | grep encrypted应返回"Options": {"encrypted": "true"}
注意事项与常见问题
加密带来确定性开销,但无需额外运维:
- 性能影响:实测吞吐量下降约 15–20%,延迟增加 30–50μs,对大多数业务无感知,但高频低延时场景(如实时金融交易)建议压测评估
- 不兼容 host 网络模式:加密仅作用于 Overlay 网络内的容器通信,host 模式容器无法加入加密 Overlay
- 无法与非 Swarm 方案混用:Consul/Etcd 驱动的旧式 Overlay 不支持
--opt encrypted,必须基于 Swarm Raft 内置 KV - 日志无显式提示:Docker 不输出“IPsec 已启用”类日志,验证依赖抓包或
ip xfrm输出











