Skip to content

网络虚拟化与 SDN

虚拟交换机(vSwitch)

CAS 使用 OVS(Open vSwitch)作为虚拟交换机,连接 VM 与物理网络:

VM1  VM2  VM3
 |    |    |
 └────┴────┘
      |
   OVS(虚拟交换机)
      |
   物理网卡(上行链路)
      |
   物理交换机

OVS 基本操作

bash
# 查看 OVS 网桥
ovs-vsctl show

# 查看流表
ovs-ofctl dump-flows br-int

# 添加端口
ovs-vsctl add-port br-int vnet0

# 查看端口统计
ovs-ofctl dump-ports br-int

VxLAN Overlay 网络

VxLAN(Virtual Extensible LAN)是 CAS 网络虚拟化的核心技术:

VM(192.168.1.10)
    ↓ 原始以太网帧
OVS(VxLAN 封装)
    ↓ UDP 封装(目标端口 4789)
    ↓ 外层 IP 头(物理网络 IP)
物理网络传输

目标宿主机 OVS(VxLAN 解封装)
    ↓ 原始以太网帧
目标 VM(192.168.1.20)

VxLAN 关键参数

参数说明
VNI(VxLAN Network Identifier)24 位,支持 1600 万个虚拟网络
VTEP(VxLAN Tunnel Endpoint)封装/解封装 VxLAN 的节点(宿主机)
UDP 端口4789(IANA 标准)
MTU物理网络 MTU 需 ≥ 1600(VxLAN 头部 50 字节)

H3C SDN 控制器集成

架构

CloudOS / CAS 管理平台
    ↓ REST API(网络编排请求)
H3C SDN 控制器(iMC/VCF)
    ↓ OpenFlow 1.3 / NETCONF
OVS(软件 VTEP)+ H3C 物理交换机(硬件 VTEP)

硬件 VTEP 优势

传统纯软件 VxLAN 的封装/解封装由宿主机 CPU 完成,消耗计算资源。H3C 支持硬件 VTEP(在物理交换机上完成 VxLAN 处理):

纯软件方案:
  VM → OVS(CPU 封装)→ 物理交换机(透传)→ OVS(CPU 解封装)→ VM
  
硬件 VTEP 方案:
  VM → OVS(透传)→ H3C 交换机(硬件封装)→ H3C 交换机(硬件解封装)→ VM
  
优势:宿主机 CPU 开销降低 30-50%,网络延迟更低

分布式虚拟路由(DVR)

DVR(Distributed Virtual Router)将路由功能分散到每台计算节点,避免网络节点成为瓶颈:

传统集中式路由:
  VM → 计算节点 → 网络节点(路由)→ 外部网络
  问题:网络节点是单点,流量瓶颈

DVR 分布式路由:
  VM → 计算节点(本地路由)→ 外部网络
  优势:每台计算节点独立路由,横向扩展

网络策略

QoS(服务质量)

bash
# 为 VM 网卡设置带宽限制
# 限制 VM 出方向带宽为 100Mbps
ovs-vsctl set Interface vnet0 \
  ingress_policing_rate=102400 \
  ingress_policing_burst=10240

# 通过 Neutron API 设置 QoS
openstack network qos policy create bw-limit-policy
openstack network qos rule create bw-limit-policy \
  --type bandwidth-limit \
  --max-kbps 102400 \
  --max-burst-kbits 10240 \
  --egress

安全组实现原理

VM 发出数据包

OVS 流表匹配安全组规则

允许:转发到目标
拒绝:DROP(不发送 ICMP 拒绝,防止信息泄露)

安全组规则存储在 OVS 流表中,规则变更实时生效(< 1 秒)。

网络故障排查

bash
# 1. 检查 VM 网卡是否连接到 OVS
virsh domiflist <vm-name>
ovs-vsctl show | grep <tap-interface>

# 2. 检查 OVS 流表是否有对应规则
ovs-ofctl dump-flows br-int | grep <vm-mac>

# 3. 检查 VxLAN 隧道状态
ovs-vsctl show | grep -A5 "type: vxlan"

# 4. 抓包分析
# 在宿主机上抓 VM 的流量
tcpdump -i <tap-interface> -n

# 抓 VxLAN 封装后的流量
tcpdump -i eth0 -n udp port 4789

# 5. 检查物理网络连通性
ping <对端宿主机IP>

褚成志的云与计算笔记