linux

Overlay在Docker中如何工作

小樊
56
2025-10-30 17:25:44
栏目: 智能运维

Overlay在Docker中的工作原理

一、Overlay网络的基本定位

Overlay网络是Docker专为跨主机容器通信设计的高级网络模式,基于VXLAN(Virtual Extensible LAN)技术实现。它通过在现有物理网络(Underlay)之上构建逻辑虚拟网络,让位于不同物理/虚拟机上的容器像处于同一局域网(LAN)中一样通信,无需关心底层网络拓扑(如IP冲突、路由配置)。Overlay网络主要依赖Docker Swarm集群(或Kubernetes等编排工具)管理,是其核心通信基础设施之一。

二、Overlay网络的创建与初始化

要使用Overlay网络,需先完成Swarm集群的搭建(Overlay网络需在Swarm环境中运行):

  1. 初始化Swarm集群:在管理节点运行docker swarm init --advertise-addr <MANAGER-IP>,生成集群Token(用于Worker节点加入);
  2. 创建Overlay网络:通过docker network create -d overlay <NETWORK-NAME>命令创建,此时Swarm会将网络配置(如VNI、子网、网关)存储在分布式键值存储(Raft协议)中,并同步到所有集群节点;
  3. 节点同步:Worker节点通过TCP 2377(管理端口)和TCP/UDP 7946(Gossip协议)接收网络配置,确保所有节点对Overlay网络的参数(如子网10.0.1.0/24、VNI4097)达成一致。

三、VXLAN与VTEP的核心作用

Overlay网络的核心技术是VXLAN,它通过封装将容器二层数据帧转换为UDP数据包,跨越三层网络传输:

四、容器连接与IP管理

当容器连接到Overlay网络时,Docker会完成以下配置:

  1. IP分配:通过**IPAM(IP Address Management)**为容器动态分配Overlay子网内的IP(如10.0.1.210.0.1.6),并设置网关(如10.0.1.1);
  2. 接口配置:为容器创建veth pair(虚拟以太网对):一端在容器内(如eth0),另一端连接到主机上的桥接接口(如br-yyyy);
  3. 路由表配置:主机路由表添加Overlay子网的路由规则(如10.0.1.0/24 dev br-yyyy),确保主机能将目标为Overlay子网的流量转发到桥接接口。

五、数据传输流程(跨主机通信示例)

以**节点1的容器A(10.0.1.2)访问节点2的容器B(10.0.1.6)**为例,流程如下:

  1. 发送方封装:容器A发送的数据帧通过veth pair进入主机1的桥接接口,Docker引擎将其封装为VXLAN数据包(外部UDP头部:源IP192.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);
  2. 底层传输:VXLAN数据包通过底层网络(如物理网、云网络)发送到节点2;
  3. 接收方解封装:节点2的VTEP接口(vxlan0)接收到UDP包后,拆解出内部数据帧,根据目标MAC转发到节点2的桥接接口(br-yyyy);
  4. 容器接收:桥接接口将数据帧传递给容器B的eth0,容器B处理请求(如HTTP响应),并通过相同路径返回响应。

六、Swarm服务与负载均衡

Overlay网络与Swarm服务深度集成,支持服务发现自动负载均衡

七、关键组件与优化

0
看了该问题的人还看了