温馨提示×

Ubuntu Overlay网络的工作原理是什么

小樊
56
2025-10-05 14:05:08
栏目: 智能运维

Ubuntu Overlay网络的工作原理
Overlay网络是一种基于底层物理网络(Underlay)构建的虚拟逻辑网络,其核心目标是通过网络虚拟化技术,在不修改底层物理网络架构的前提下,实现跨主机、跨子网的容器或虚拟机通信。Ubuntu系统中的Overlay网络主要依赖VXLAN(Virtual Extensible LAN)等隧道技术,结合控制平面数据平面的协同工作,为容器提供隔离的虚拟网络环境。

1. 核心组件

Overlay网络的运行依赖三大核心组件的协同:

  • 边缘设备(VTEP):负责数据报文的封装解封,是Overlay网络与Underlay网络的连接点。在Ubuntu环境中,VTEP通常由软件交换机(如Open vSwitch)Docker引擎实现——例如,当容器发送数据时,VTEP会将容器内部的以太网帧封装成VXLAN报文(添加外层IP头部和UDP头部);当接收Underlay网络转发的VXLAN报文时,VTEP会解封外层头部,将原始以太网帧交付给目标容器。
  • 控制平面:负责虚拟网络的管理与协调,包括网络拓扑的建立、主机可达性信息的通告(如容器IP与VTEP地址的映射)、隧道端点的发现等。Ubuntu中的Overlay网络(如Docker的overlay驱动)通常依赖**key-value数据库(如Consul、Etcd)**作为控制平面——Docker守护进程会将网络配置(如Overlay网络的子网、网关、容器IP分配)同步到Consul中,各主机通过查询Consul获取其他主机的VTEP地址,实现跨主机的通信。
  • 数据平面:负责虚拟网络中的数据转发。Overlay网络的数据转发基于隧道技术——源主机的VTEP将容器数据封装成VXLAN报文后,通过Underlay网络(如物理以太网、IP网络)转发到目标主机的VTEP;目标主机的VTEP解封报文,将原始数据交付给目标容器。数据平面的转发规则由控制平面动态维护,确保数据能够准确到达目标。

2. 关键技术:VXLAN封装

VXLAN是Ubuntu Overlay网络最常用的隧道技术,其核心是通过MAC-in-UDP的封装方式,将二层以太网帧转换为可以在Underlay网络中传输的三层报文。具体流程如下:

  • 封装过程:当容器A(位于主机1,IP为10.0.0.2)向容器B(位于主机2,IP为10.0.0.3)发送数据时,主机1的VTEP(如Open vSwitch)会获取容器B的MAC地址(通过ARP协议解析),然后将容器A的以太网帧(包含源MAC、目标MAC、IP等字段)封装成VXLAN报文。封装后的报文结构为:原始以太网帧(内层)→ VXLAN头部(包含VNI,即VXLAN网络标识符,用于区分不同的Overlay网络)→ UDP头部(目标端口为4789,VXLAN标准端口)→ 外层IP头部(源IP为主机1的物理接口IP,目标IP为主机2的物理接口IP)→ 外层以太网头部(源MAC为主机1的物理接口MAC,目标MAC为主机2的物理接口MAC)。
  • 解封过程:主机2的VTEP收到VXLAN报文后,首先验证外层以太网头部的目标MAC是否为自己的MAC地址(确保报文是发给自己的),然后解析UDP头部(确认目标端口为4789),提取VXLAN头部中的VNI(验证是否属于自己的Overlay网络),最后解封原始以太网帧,根据帧中的目标MAC地址将数据交付给主机2上的容器B。

3. 网络发现与配置同步

为了实现跨主机通信,Ubuntu Overlay网络需要解决两个关键问题:主机可达性(如何找到目标容器所在主机的VTEP地址)和网络配置一致性(如何确保所有主机的Overlay网络配置一致)。其解决流程如下:

  • 配置同步:Docker守护进程启动时,会读取/etc/docker/daemon.json中的cluster-store(如Consul地址)和cluster-advertise(如主机1的IP和端口)参数,将自身注册到Consul中。当创建Overlay网络(如docker network create -d overlay my_overlay)时,Docker会将网络信息(如网络ID、子网、网关、容器IP分配范围)同步到Consul中,所有加入集群的主机都能从Consul获取该网络的配置信息。
  • 主机可达性:当主机1上的容器A要访问主机2上的容器B时,容器A会发送ARP请求(询问容器B的MAC地址)。主机1的Docker引擎会拦截该请求,查询Consul获取容器B所在主机(主机2)的VTEP地址(即主机2的物理接口IP),然后通过ICMP PingARP请求验证主机2的可达性。若主机2可达,主机1的VTEP会将容器B的MAC地址与主机2的VTEP地址关联起来,后续容器A发送给容器B的数据会直接通过VXLAN隧道转发到主机2。

4. 数据转发流程

Ubuntu Overlay网络的跨主机数据转发流程可分为以下步骤:

  1. 容器发送数据:容器A(主机1)向容器B(主机2)发送以太网帧,帧中包含目标容器B的MAC地址。
  2. VTEP封装:主机1的VTEP收到容器A的数据,查询本地MAC表(或通过控制平面获取)得到容器B的VTEP地址(主机2的IP),将原始以太网帧封装成VXLAN报文(添加VXLAN头部、UDP头部、外层IP头部和以太网头部)。
  3. Underlay转发:封装后的VXLAN报文通过Underlay网络(如物理以太网)转发到主机2的物理接口。
  4. VTEP解封:主机2的VTEP收到VXLAN报文,解封外层头部,提取原始以太网帧,根据帧中的目标MAC地址将数据交付给主机2上的容器B。

通过上述机制,Ubuntu Overlay网络实现了跨主机容器的通信,且容器之间仿佛处于同一局域网中,无需关心底层物理网络的拓扑结构。这种架构不仅提高了网络的灵活性和扩展性(如VXLAN支持1600万个虚拟网络标识符,远超过传统VLAN的4096个),还能与底层Underlay网络解耦,便于网络管理员统一管理物理与虚拟网络。

0