Skip to content

Overlay网络

underlay网络

underlay 网络指的是物理网络或传统的二层/三层网络(如以太网、VLAN、物理交换机、路由器等),即数据中心或主机之间真实存在的网络基础设施。存在于真实网络设备上的网络

overlay网络

overlay 网络是在 underlay 网络之上,通过隧道技术(如 VXLAN、GRE、IP-in-IP 等)构建的虚拟网络。它将不同主机上的容器/虚拟机通过虚拟隧道连接起来,形成一个逻辑上的统一网络。为容器、虚拟机等提供跨主机的虚拟网络,实现多租户隔离、灵活的网络拓扑和自动化管理。 应用数据如果承载了IP协议,overlay则是三层网络,如果承载了数据链路层协议就是二层网络.

Linux隧道技术

tun

  • 定义:tun 是 Linux 提供的一种虚拟网络设备(TUN/TAP 设备中的 TUN),工作在三层(网络层,IP 层)。
  • 作用:用于点对点的 IP 隧道,常见于 VPN(如 OpenVPN、WireGuard)等场景。
  • 原理:
  • 应用程序可以像操作真实网卡一样操作 tun 设备。
  • 通过 tun 设备发送的 IP 包会被用户空间程序捕获,然后可以进行加密、封装等处理,再通过物理网络发送到远端。
  • 远端收到后解封装,再通过 tun 设备注入到目标主机的网络协议栈。
  • 特点:
  • 只处理 IP 层数据包(不处理以太网帧)。
  • 适合点对点、加密传输、VPN 等场景。
  • 性能较高,配置灵活。

vxlan

  • 定义:VXLAN(Virtual Extensible LAN)是一种基于 UDP 的三层网络隧道协议,用于在物理网络之上构建虚拟二层网络(overlay)。
  • 作用:实现跨主机的二层网络互通,常用于容器、虚拟机的 overlay 网络(如 Kubernetes 的 Flannel、Calico VXLAN 模式)。

  • 原理:

  • VXLAN 将原始的以太网帧封装在 UDP 数据包中,外层 IP/UDP 头部用于在物理网络中传输。
  • 每个 VXLAN 网络有唯一的 VNI(VXLAN Network Identifier),支持大规模多租户隔离。
  • 目标主机收到 UDP 包后解封装,还原出原始以太网帧,交给目标容器/虚拟机。

  • 特点:

  • 支持大规模二层网络扩展(最多 1600 万个网络)。
  • 适合云原生、数据中心、容器编排等场景。
  • 需要物理网络支持 UDP 转发,部分硬件可做 VXLAN offload 加速。

对比

  • tun:不解析 IP,只是“搬运工”。
  • vxlan:利用 IP 层进行寻址和转发,实现 overlay 网络的自动寻址和大规模扩展。

Pod跨节点通信过程

场景假设 Node1 上有 PodA,IP 为 10.244.1.2 Node2 上有 PodB,IP 为 10.244.2.3 两节点通过物理网络(underlay)互通 使用 VXLAN 作为 overlay 网络方案

过程

1. PodA 发送数据包

  • PodA(10.244.1.2)要访问 PodB(10.244.2.3),发出目标为 10.244.2.3 的数据包。
  • PodA 的默认网关是本节点的 CNI 虚拟网桥(如 cni0、flannel.1)。

2. 虚拟网桥转发

  • 数据包到达 Node1 的虚拟网桥(如 flannel.1)。
  • 虚拟网桥根据路由表发现:目标 IP(10.244.2.3)属于 Node2。

3. Overlay 封装(VXLAN)

  • Flannel/Calico 等 CNI 插件在 Node1 上查找 Node2 的物理 IP(如 192.168.1.2)。
  • 使用 VXLAN 协议,将原始数据包(源 10.244.1.2,目标 10.244.2.3)封装在一个新的 UDP 包中:
  • 外层源 IP:Node1 的物理 IP(如 192.168.1.1)
  • 外层目标 IP:Node2 的物理 IP(如 192.168.1.2)
  • UDP 端口:VXLAN 默认 4789
  • VXLAN Header:包含 VNI(虚拟网络标识

4. 物理网络传输(Underlay)

  • 封装后的 UDP 包通过物理网络从 Node1 发送到 Node2。
  • 物理网络只负责转发外层 IP 包,不关心内部的 Pod 网络

5. Node2 解封装

  • Node2 上的 VXLAN 设备(如 flannel.1)收到 UDP 包。
  • VXLAN 设备解封装,取出原始的 Pod 网络包(源 10.244.1.2,目标 10.244.2.3)。

6. 虚拟网桥转发到 PodB

  • 解封装后的包被送到 Node2 的虚拟网桥。
  • 虚拟网桥根据目标 IP(10.244.2.3)将包转发到 PodB 的 veth 设备。
  • PodB 收到数据包,通信完成。

7. 路由和 ARP 管理

  • CNI 插件负责维护 Pod 网段与节点物理 IP 的映射(如 etcd 存储,或节点本地配置)。
  • 通常每个节点分配一个 Pod 子网,节点间通过 overlay 网络互通。
PodA(10.244.1.2) --veth--> cni0/flannel.1 --VXLAN封装-->
  物理网络(192.168.1.1 -> 192.168.1.2) --VXLAN解封装-->
    flannel.1/cni0 --veth--> PodB(10.244.2.3)