984 字
5 分钟
VXLAN-EVPN
VXLAN-EVPN:原理深度解析与应用场景详解
VXLAN-EVPN (Virtual Extensible LAN - Ethernet VPN) 是一种 现代数据中心网络架构方案 ,它将 VXLAN 的 Overlay 封装技术与 EVPN 的控制平面结合,解决了传统 VXLAN 依赖组播或手工配置的局限性,提供了 自动化、可扩展的多租户 L2/L3 网络覆盖能力 。
一、核心原理拆解
1. VXLAN Overlay 基础
- 封装格式 :原始 L2 帧添加 UDP/IP 封装(外层源/目的 IP+外层源/目的端口=4789)
- VXLAN 头部 :关键字段是 24-bit VNI (VXLAN Network Identifier),每个 VNI 对应一个虚拟 L2 域
- 逻辑拓扑 :通过 VTEP(VXLAN Tunnel End Point)建立隧道,虚拟机流量在物理网络上透明传输
2. EVPN 控制平面革命
- BGP 扩展 :基于 RFC 7432 定义 MP-BGP 的 EVPN 地址族 (AFI=25, SAFI=70)
- 五种路由类型 :
- Type 1 (Ethernet Auto-Discovery) :多归接入(Multi-homing)流量优化
- Type 2 (MAC/IP):通告虚拟机 MAC+IP 信息
- Type 3 (Inclusive Multicast):实现 BUM 流量转发(替代组播)
- Type 4 (Ethernet Segment):接入交换机冗余(A/A 或 A/S 模式)
- Type 5 (IP Prefix):通告 L3 路由实现分布式网关
- VTEP 自动发现 :通过 MP-BGP 自动学习远端 VTEP 地址,无需手动配置
3. 分布式网关架构
- Anycast Gateway:所有网关使用相同虚拟 IP+MAC(如 192.168.1.1/24)
- Active-Active 网关 :南北流量通过 ECMP 分流,避免单点故障
- 主机路由通告 :网关通过 Type 5 路由通告每个虚拟机 IP 的路由(/32 或/128)
二、OpenStack 与 K8s 应用场景
OpenStack 典型部署
graph TB subgraph OpenStack Cloud Nova[VM] -->|流量| OVS-VTEP OVS-VTEP -->|VXLAN| Leaf-Spine Leaf-Spine -->|BGP-EVPN| SDN[Controller] end SDN --> Neutron[ML2 Driver] Neutron -->|API| Keystone[认证]-
ML2 Driver 实现
- 驱动配置 :
[ml2]type_drivers = vxlan, flattenant_network_types = vxlanmechanism_drivers = openvswitch, l2population
- EVPN 集成 :
- 通过
networking-bgpvpn插件实现 BGP 路由分发 - VTEP 角色由 Open vSwitch 或 OVN 实现(OVN 支持原生 EVPN)
- 通过
- 驱动配置 :
-
多租户隔离
- 每个 Project 分配独立 VNI (e.g., ProjectA: VNI 10001, ProjectB: VNI 10002)
- Type 2 路由携带
Route Target (RT)实现 VNI 隔离
-
虚拟机迁移保活
- 当 VM 从 Host1 迁移至 Host2:
- 新主机 VTEP 发送 Type 2 更新路由
- 全网关更新 ARP 表项,流量无缝切换
- 当 VM 从 Host1 迁移至 Host2:
Kubernetes 网络方案
-
Calico 集成
- 配置示例 :
apiVersion: projectcalico.org/v3kind: IPPoolmetadata:name: ippool-evpnspec:cidr: 10.244.0.0/16vxlanMode: CrossSubnetipipMode: Never
- 节点路由通告 :
- 每个 Node 通过 Type 5 通告 Pod 网段路由
- Border Leaf 交换机学习 K8s 节点路由
- 配置示例 :
-
Multus 多网卡场景
- Pod 通过
NetworkAttachmentDefinition连接 VXLAN 网络:apiVersion: k8s.cni.cncf.io/v1kind: NetworkAttachmentDefinitionmetadata:name: tenant-vxlanspec:config: '{"cniVersion":"0.3.1","type":"vxlan","vni": 5001}'
- Pod 通过
-
Service 与 Ingress 集成
- 通过 BGP 导出 K8s Service IP (ExternalIP):
kubectl expose deployment nginx --port=80 --external-ip=203.0.113.10
- 边缘网关收到 Type 5 路由:
203.0.113.10/32 via NodeIP
- 边缘网关收到 Type 5 路由:
- 通过 BGP 导出 K8s Service IP (ExternalIP):
三、关键优势与适用场景
| 场景类型 | EVPN 实现机制 | 案例 |
|---|---|---|
| 大规模租户隔离 | RT/VNI 隔离 + Type 2 路由 | 公有云多客户 VPC 网络 |
| 虚拟机热迁移 | MAC 移动性扩展 | OpenStack 迁移 VM 不丢包 |
| 容器网络直通 | Type 5 通告 Pod IP | K8s Pod 直连物理网络 |
| 分布式防火墙集成 | 结合 Service Chain | 通过 VRF 泄漏实现微分段 |
| 混合云扩展 | 通过 eBGP 对接公有云网关 | AWS Direct Connect + VXLAN 扩展 |
四、技术演进动态
- SRv6 整合 :
- 新一代架构使用 SRv6 替代 VXLAN 封装(如 ietf-dmm-srv6-mobile-uplane)
- eBPF 加速 :
- Cilium 在 K8s 中通过 eBPF 实现 VXLAN 数据平面加速
- AI 运维应用 :
- 基于 EVPN 路由的 Telemetry 数据训练网络异常检测模型
最佳实践建议 :部署时建议使用 Leaf-Spine CLOS 架构,Border Leaf 节点运行 FRR 或 GoBGP 作为 Route Reflector,避免全网状 BGP 会话。
VXLAN-EVPN 已成为现代云网络的事实标准,通过控制平面与数据平面分离,结合 BGP 的强大路由能力,完美解决了多租户、大规模、高移动性场景下的网络挑战。