☰
CentOS 7下Open vSwitch与VXLAN网络配置指南
2026/10/31 13:53:02 网站建设 项目流程

1. Open vSwitch与VXLAN技术概述

在云计算和虚拟化环境中,网络虚拟化是构建灵活、可扩展基础设施的关键技术。Open vSwitch(OVS)作为一款高性能的开源虚拟交换机,已经成为OpenStack等云平台的标准网络组件。而VXLAN(Virtual Extensible LAN)则是解决传统VLAN ID数量限制(仅4096个)的覆盖网络技术,通过24位的VNI(VXLAN Network Identifier)可支持多达1600万个虚拟网络。

Open vSwitch的核心优势在于:

  • 支持标准管理接口(如OpenFlow)
  • 提供丰富的流量监控和QoS功能
  • 可实现跨物理服务器的虚拟网络互通
  • 与Linux内核深度集成,性能接近物理交换机

VXLAN则通过以下机制工作:

  1. 将原始二层帧封装在UDP数据包中(使用4789端口)
  2. 通过IP网络传输封装后的数据包
  3. 在目标端点解封装恢复原始帧
  4. 使用多播或单播进行帧转发

2. CentOS 7环境准备

2.1 系统基础配置

在开始部署前,需要对CentOS 7系统进行必要的优化配置。以下命令需要以root权限执行:

# 关闭SELinux(临时生效) setenforce 0 # 永久关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 停止并禁用防火墙 systemctl stop firewalld systemctl disable firewalld # 安装基础工具 yum install -y net-tools vim wget

注意:生产环境中关闭SELinux和防火墙需谨慎,应根据实际安全需求调整策略。测试环境中关闭这些服务可以避免后续安装过程中的权限问题。

2.2 内核参数优化

OVS和VXLAN对内核参数有特定要求,需要调整以下参数:

# 编辑sysctl配置文件 cat >> /etc/sysctl.conf << EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # 加载br_netfilter模块 modprobe br_netfilter # 应用配置 sysctl -p

这些参数的作用是:

  • 启用IP转发功能,使主机可以作为路由器
  • 允许网桥处理IPv4/IPv6的iptables规则
  • 加载必要的内核模块支持网桥过滤

3. Open vSwitch安装与配置

3.1 安装Open vSwitch

CentOS 7默认仓库中的OVS版本较旧,建议从官方仓库安装最新稳定版:

# 启用EPEL仓库 yum install -y epel-release # 安装Open vSwitch yum install -y openvswitch openvswitch-devel # 启动服务并设置开机自启 systemctl start openvswitch systemctl enable openvswitch # 验证安装 ovs-vsctl --version

3.2 基础网络配置

假设我们有两台主机(HostA和HostB),需要通过OVS和VXLAN实现跨主机的虚拟机网络互通。以下是HostA的配置示例:

# 创建网桥 ovs-vsctl add-br ovs-br0 # 添加物理网卡到网桥(假设网卡名为ens33) ovs-vsctl add-port ovs-br0 ens33 # 配置IP地址(假设为192.168.1.100/24) ip addr add 192.168.1.100/24 dev ovs-br0 ip link set ovs-br0 up # 添加默认路由(假设网关为192.168.1.1) ip route add default via 192.168.1.1 dev ovs-br0

在HostB上执行类似操作,只需修改IP地址为192.168.1.101/24。

4. VXLAN隧道配置

4.1 静态VXLAN配置

在两台主机间建立VXLAN隧道的最简单方式是静态配置:

# 在HostA上执行(目标为HostB的IP 192.168.1.101) ovs-vsctl add-port ovs-br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.1.101 options:key=100 # 在HostB上执行(目标为HostA的IP 192.168.1.100) ovs-vsctl add-port ovs-br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.1.100 options:key=100

关键参数说明:

  • type=vxlan:指定接口类型为VXLAN
  • remote_ip:对端主机的IP地址
  • key:相当于VLAN ID的VXLAN网络标识符(VNI)

4.2 多播模式VXLAN

在大规模环境中,可以使用多播自动发现VXLAN端点:

# 在两台主机上执行相同命令 ovs-vsctl add-port ovs-br0 vxlan0 -- set interface vxlan0 type=vxlan options:group=239.1.1.1 options:key=100

这种模式下,所有配置相同多播地址和VNI的主机会自动建立隧道。

5. 虚拟网络测试

5.1 创建测试命名空间

使用Linux网络命名空间模拟虚拟机进行测试:

# 在HostA上创建命名空间ns1并连接veth pair到OVS ip netns add ns1 ip link add veth-ns1 type veth peer name veth-ovs ip link set veth-ns1 netns ns1 ovs-vsctl add-port ovs-br0 veth-ovs ip link set veth-ovs up # 配置命名空间内的网络 ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth-ns1 ip netns exec ns1 ip link set veth-ns1 up ip netns exec ns1 ip link set lo up # 在HostB上创建命名空间ns2 ip netns add ns2 ip link add veth-ns2 type veth peer name veth-ovs ip link set veth-ns2 netns ns2 ovs-vsctl add-port ovs-br0 veth-ovs ip link set veth-ovs up ip netns exec ns2 ip addr add 10.0.0.2/24 dev veth-ns2 ip netns exec ns2 ip link set veth-ns2 up ip netns exec ns2 ip link set lo up

5.2 跨主机连通性测试

在HostA的ns1中ping HostB的ns2:

ip netns exec ns1 ping 10.0.0.2

如果配置正确,应该能看到成功的ping响应。如果失败,可以按以下步骤排查:

  1. 检查OVS端口状态:ovs-vsctl show
  2. 检查VXLAN隧道状态:ovs-ofctl dump-flows ovs-br0
  3. 检查物理网络连通性
  4. 使用tcpdump抓包分析:tcpdump -i ens33 udp port 4789 -vv

6. OpenStack集成配置

6.1 Neutron插件配置

在OpenStack环境中,需要在控制节点和计算节点上配置Neutron使用OVS和VXLAN:

# /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = flat,vlan,vxlan tenant_network_types = vxlan mechanism_drivers = openvswitch,l2population [ml2_type_vxlan] vni_ranges = 1000:2000

6.2 OVS代理配置

# /etc/neutron/plugins/ml2/openvswitch_agent.ini [ovs] bridge_mappings = physnet1:br-ex local_ip = <主机物理IP> [agent] tunnel_types = vxlan l2_population = True

6.3 网络创建示例

通过OpenStack CLI创建VXLAN网络:

openstack network create --provider-network-type vxlan \ --provider-segment 1001 --share vxlan-net openstack subnet create --network vxlan-net \ --subnet-range 192.168.100.0/24 vxlan-subnet

7. 性能优化与问题排查

7.1 性能调优建议

  1. 巨型帧支持:在物理网络上启用MTU 9000,避免VXLAN封装导致分片

    ip link set ens33 mtu 9000 ovs-vsctl set interface vxlan0 mtu_request=9000
  2. 流表缓存:启用OVS流表缓存减少控制路径开销

    ovs-vsctl set Open_vSwitch . other_config:flow-cache-mask=0x7fffffff
  3. 多队列:为虚拟接口启用多队列提升吞吐量

    ovs-vsctl set interface veth-ovs options:n_rxq=4

7.2 常见问题解决

问题1:VXLAN隧道无法建立

排查步骤:

  1. 确认两端local_ip配置正确
  2. 检查物理网络是否允许UDP 4789端口通信
  3. 验证两端VNI配置一致
  4. 使用ovs-appctl ofproto/trace跟踪流表

问题2:虚拟机间延迟高

可能原因及解决方案:

  • 物理网卡未启用SR-IOV:考虑使用DPDK加速
  • 内核协议栈处理瓶颈:调整net.core.rmem_max等参数
  • 交换机配置问题:检查物理交换机流控和缓冲设置

问题3:网络吞吐量不达标

优化建议:

# 启用OVS内核模块的GRO/GSO ethtool -K ens33 gro on gso on # 调整NUMA绑定(针对多CPU主机) ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x6

8. 生产环境部署建议

在企业级部署中,应考虑以下增强措施:

  1. 高可用架构:

    • 部署多个网络节点实现Neutron L3 HA
    • 使用Keepalived实现OVS控制平面冗余
  2. 安全加固:

    # 限制VXLAN隧道端点 ovs-vsctl set interface vxlan0 options:remote_ip=<特定IP> # 启用流量过滤 ovs-vsctl set bridge ovs-br0 protocols=OpenFlow13 ovs-ofctl add-flow ovs-br0 "priority=10,actions=normal"
  3. 监控方案:

    • 使用sFlow或NetFlow监控OVS流量
    • 部署Prometheus+Granfana收集OVS统计指标
    • 配置告警规则监控隧道状态
  4. 备份策略:

    # 定期备份OVS配置 ovs-vsctl save > ovs-backup-$(date +%F).conf # 备份Neutron数据库 mysqldump -u neutron -p neutron > neutron-db-$(date +%F).sql

通过以上完整配置,我们已经在CentOS 7上成功部署了Open vSwitch和VXLAN网络,实现了跨主机的虚拟网络互通。这套方案不仅适用于OpenStack环境,也可以应用于Kubernetes、Docker等容器平台的网络解决方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询