Overlay网络是Docker专为跨主机容器通信设计的高级网络模式,基于VXLAN(Virtual Extensible LAN)技术实现。它通过在现有物理网络(Underlay)之上构建逻辑虚拟网络,让位于不同物理/虚拟机上的容器像处于同一局域网(LAN)中一样通信,无需关心底层网络拓扑(如IP冲突、路由配置)。Overlay网络主要依赖Docker Swarm集群(或Kubernetes等编排工具)管理,是其核心通信基础设施之一。
要使用Overlay网络,需先完成Swarm集群的搭建(Overlay网络需在Swarm环境中运行):
docker swarm init --advertise-addr <MANAGER-IP>,生成集群Token(用于Worker节点加入);docker network create -d overlay <NETWORK-NAME>命令创建,此时Swarm会将网络配置(如VNI、子网、网关)存储在分布式键值存储(Raft协议)中,并同步到所有集群节点;10.0.1.0/24、VNI4097)达成一致。Overlay网络的核心技术是VXLAN,它通过封装将容器二层数据帧转换为UDP数据包,跨越三层网络传输:
vxlan0),负责封装(发送方:将容器数据帧封装为UDP包)和解封装(接收方:将UDP包拆解为容器数据帧)。VTEP是Overlay网络实现跨主机通信的关键组件。当容器连接到Overlay网络时,Docker会完成以下配置:
10.0.1.2、10.0.1.6),并设置网关(如10.0.1.1);eth0),另一端连接到主机上的桥接接口(如br-yyyy);10.0.1.0/24 dev br-yyyy),确保主机能将目标为Overlay子网的流量转发到桥接接口。以**节点1的容器A(10.0.1.2)访问节点2的容器B(10.0.1.6)**为例,流程如下:
192.168.1.9(节点1)、目标IP192.168.1.10(节点2);VXLAN头部:VNI4097;内部数据帧:源MAC容器A的MAC、目标MAC容器B的MAC、源IP10.0.1.2、目标IP10.0.1.6);vxlan0)接收到UDP包后,拆解出内部数据帧,根据目标MAC转发到节点2的桥接接口(br-yyyy);eth0,容器B处理请求(如HTTP响应),并通过相同路径返回响应。Overlay网络与Swarm服务深度集成,支持服务发现和自动负载均衡:
my-service)会解析为容器IP(如10.0.1.2、10.0.1.6),容器通过服务名称通信,无需关心具体IP;8081端口(-p 8081:80),请求会被转发到节点2的容器B(10.0.1.6:80)。192.168.1.10:8081访问容器B的80端口)。默认情况下,docker_gwbridge仅允许外部到容器的流量,容器间通信需通过Overlay网络;--opt encrypted参数启用VXLAN流量加密(如docker network create -d overlay --opt encrypted my-overlay),确保数据传输安全;1450(适应VXLAN的50字节开销),需确保底层网络支持该MTU,避免数据包分片。