结论:overlay 网络用 VXLAN 隧道在主机网络上再叠一层虚拟二层网络:每台主机上的容器得到 overlay 内的独立 IP,跨主机数据包被主机内核的 VXLAN 设备封装进 UDP(4789 端口)发往目标主机解封,容器感知不到跨主机。Docker Swarm 的服务发现由内置 DNS(VIP 或 DNSRR)配合 IPVS 完成负载均衡。

展开:数据平面细节:每个 overlay 网络对应一个 VXLAN ID(VNI),主机上创建 vtep 设备并维护"容器 MAC/IP → 主机 IP"的转发表(通过 Serf/gossip 成员协议交换);同 overlay 内容器 ARP 广播被 vtep 代答或泛洪。控制平面:Swarm manager 分配网络与 IP,节点加入网络时本地建桥(docker_gwbridge 负责出网 NAT)。性能与排障:VXLAN 封装有约 50 字节开销,MTU 要相应调小(常 1450),云环境安全组需放行 UDP 4789 与 gossip 的 TCP/UDP 7946;加密可选 IPSec。易错点:overlay 是 Swarm 模式能力,单机 docker network create --driver overlay 需要 swarm init;K8s 里类似方案是 VXLAN 模式的 flannel,而 Calico 默认走三层路由不封装(性能更好但要求网络可路由),选型时"overlay 封装 vs 纯路由"是核心分歧。

docker swarm init
docker network create -d overlay --attachable webnet
docker service create --network webnet --name web nginx

追问方向:host 网络与 macvlan 的适用场景(性能极致、需要独立 MAC 的遗留应用)、Cilium 用 eBPF 替代 kube-proxy+overlay 的收益。