ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OVS核心原理:OpenFlow、OVSDB与VXLAN协同机制解析

OVS核心原理:OpenFlow、OVSDB与VXLAN协同机制解析 1. 这不是“另一个交换机”OVS到底在解决什么问题如果你刚接触网络虚拟化看到“OVS”这个词第一反应可能是“不就是个软件交换机吗Linux自带的bridge不是也能转发数据”——我当年也是这么想的直到在KVM集群里配了三天VLAN发现虚拟机之间根本ping不通抓包一看流量全卡在宿主机的iptables链里连二层都出不去。那一刻我才真正明白传统网桥bridge和OVS根本不是同一类工具。OVS不是“替代”而是“重构”——它把交换机从硬件盒子变成可编程、可编排、可嵌入云平台的网络内核模块。OVS全称Open vSwitch核心定位是为虚拟化环境提供生产级、多协议兼容、高可扩展的软件交换能力。它不是给单台虚拟机配个网卡那么简单而是要支撑起成百上千台虚拟机、容器、裸金属服务器之间复杂、动态、策略驱动的通信。你搜到的那些热词——OpenFlow、OVSDB、VXLAN——每一个都不是孤立功能而是OVS解决不同层级问题的“武器”。OpenFlow负责“怎么转发”OVSDB负责“怎么配置”VXLAN负责“怎么跨物理网络连通虚拟网络”。这三者合起来才构成OVS真正的骨架。举个最典型的场景你在OpenStack上创建一个租户网络指定网络类型为VXLAN子网段是10.0.100.0/24。你点下“创建”按钮后背后发生了什么Neutron服务通过OVSDB协议把这条网络定义写进OVS的本地数据库OVS daemon读取配置自动创建一个名为br-tun的隧道桥并在上面生成VXLAN端口绑定到物理网卡当虚拟机发包时OVS内核模块根据流表由OpenFlow下发判断这是VXLAN封装包目标IP是另一台计算节点的管理IP于是打上VNI标签封装进UDP包从物理网卡发出。整个过程没有人工干预没有静态路由没有手动加VLAN全靠OVS的三个核心组件协同完成。所以OVS不是“能用就行”的玩具它是现代云数据中心网络的事实标准。你看到的“支持VXLAN的路由器”本质是厂商把OVS的VXLAN隧道能力封装进了硬件固件你查的“VXLAN原理”在OVS里不是理论而是每秒处理数万条封装/解封装操作的实打实代码。理解OVS不是为了背概念而是为了看懂你部署的每一朵云、每一个K8s集群、每一个NFV网元它的网络底座到底是怎么呼吸、怎么思考、怎么出错的。2. OVS三大支柱OpenFlow、OVSDB与VXLAN如何咬合工作OVS不是单体软件而是一个精密协作的系统其稳定运行依赖于三个核心子系统——OpenFlow、OVSDB和VXLAN——它们各自承担明确职责又通过严格定义的接口紧密咬合。这种设计不是为了炫技而是为了解决真实运维中“配置分散、状态不一致、变更不可追溯”的顽疾。下面我用一次完整的VXLAN网络上线流程拆解这三者的分工与协同逻辑。2.1 OpenFlow数据平面的“交通指挥员”OpenFlow是OVS的数据面控制协议它定义了“包进来之后该怎么处理”。OVS本身不决定转发逻辑它只提供一个可编程的流水线pipeline而OpenFlow控制器如ONOS、Ryu或OpenStack Neutron的ML2插件才是那个拿着红绿灯站在路口的交警。OpenFlow的核心是流表Flow Table每一条流表项就像一个交通规则“如果源IP是10.0.100.10目的端口是80就转发到端口2并修改TTL减1”。在VXLAN场景下OpenFlow流表被划分为多个层级Table 0~65535形成清晰的处理流水线Table 0Classifier识别入向包类型。如果是ARP请求跳转到Table 10处理如果是IP包提取VLAN ID或VXLAN VNI跳转到Table 20。Table 20VXLAN Decap对收到的VXLAN包进行解封装。匹配UDP目的端口5242默认VXLAN端口提取内层以太网帧剥离外层IP/UDP头将VNI映射为内部VLAN ID再跳转到Table 30。Table 30L2 Learning执行标准二层学习。根据源MAC更新MAC地址表根据目的MAC查找出口端口。若未命中则泛洪到所有端口除入端口。Table 40VXLAN Encap对需要跨节点转发的包进行封装。查到目的MAC对应的是远端VTEPVXLAN Tunnel EndpointIP就添加VXLAN头含VNI、UDP头、外层IP头封装后从物理网卡发出。提示ovs-ofctl dump-flows br-int是诊断网络不通的第一命令。如果看到大量table0, n_packets0的流表项说明包根本没匹配上任何规则大概率是VLAN/VNI映射配置错误或物理链路不通。2.2 OVSDB控制平面的“中央档案馆”如果说OpenFlow管“怎么转”OVSDB就管“该转成什么样”。OVSDBOpen vSwitch Database是一个轻量级、基于JSON-RPC的数据库协议它存储并同步OVS的所有配置状态桥Bridge的创建、端口Port的绑定、接口Interface的参数、QoS策略、甚至流表的初始模板。它的关键价值在于状态一致性与配置可审计性。OVSDB采用客户端-服务器架构OVS daemon内置一个OVSDB server外部控制器如ovs-vsctl命令、Ansible模块、OpenStack Neutron作为client通过unix:/var/run/openvswitch/db.sock或TCP连接与其通信。所有配置变更都以事务方式写入数据库确保原子性。例如执行ovs-vsctl add-br br-int实际发生的是client向OVSDB server发送一个insert事务要求在Bridge表中新增一行server校验参数合法性如桥名不能重复写入内存数据库server触发OVS daemon的监听器daemon读取新记录调用内核模块创建netdevdaemon更新自身状态并向client返回成功响应。这种设计带来两个硬性好处一是配置变更有完整日志/var/log/openvswitch/ovsdb-server.log谁在什么时候改了什么一目了然二是支持多控制器并发写入OVSDB会自动处理冲突如两个进程同时创建同名桥后写入者失败。我在某次大规模滚动升级中正是靠翻OVSDB日志3分钟内定位到是Ansible脚本漏写了--may-exist参数导致部分节点桥被重复创建而报错。2.3 VXLAN覆盖网络的“隐形隧道”VXLANVirtual eXtensible LAN是OVS实现大二层网络的关键技术它解决了传统VLAN4094个ID无法满足云环境海量租户隔离需求的问题。VXLAN的核心思想是“在IP网络上构建二层隧道”用24位VNIVXLAN Network Identifier提供高达1677万个虚拟网络远超VLAN的4094个。在OVS中VXLAN不是独立进程而是作为OVS内核模块的一个端口类型typevxlan集成。创建一个VXLAN端口本质是告诉OVS“请为这个VNI建立一条通往指定IP的UDP隧道”。具体配置如下ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 typevxlan options:remote_ip192.168.10.20 options:key100这条命令做了三件事在桥br-tun上添加一个名为vxlan0的端口将该端口类型设为vxlan启用VXLAN封装/解封装引擎指定远端VTEP IP为192.168.10.20VNI为100key参数即VNI值。VXLAN的封装过程完全由OVS内核模块在零拷贝模式下完成无需用户态进程参与性能损耗极低。实测数据显示在万兆网卡上OVS处理VXLAN封装的吞吐量可达9.2Gbps接近物理网卡极限。但这里有个极易被忽略的细节VXLAN的MTU必须全局对齐。物理网络MTU通常是1500VXLAN头额外增加50字节8字节VXLAN 20字节IP 8字节UDP 14字节以太网因此VXLAN隧道两端的物理网卡MTU必须设为1550否则大包会被分片引发严重丢包。我曾在一个金融客户现场花两天时间排查“间歇性网络延迟”最后发现就是一台交换机的MTU没调导致VXLAN包被分片后重组失败。3. 从零搭建一个可验证的OVSVXLAN实验环境纸上谈兵不如亲手敲几行命令。下面我带你用两台Ubuntu 22.04虚拟机从零开始搭建一个最小可行的OVSVXLAN环境并验证连通性。整个过程不依赖OpenStack或任何上层平台纯粹使用OVS原生命令目的是让你看清每个环节的输入输出建立肌肉记忆。3.1 环境准备与基础依赖安装我们使用两台虚拟机分别命名为node1IP: 192.168.56.10和node2IP: 192.168.56.11均通过VirtualBox桥接至物理网络。首先确保系统干净关闭可能干扰的网络服务# 在两台节点上执行 sudo systemctl stop systemd-networkd sudo systemctl disable systemd-networkd sudo systemctl stop NetworkManager sudo systemctl disable NetworkManager然后安装OVS核心包。Ubuntu官方源的OVS版本较旧2.15建议使用OVS官方PPA获取最新版2.17以支持更完善的VXLAN特性sudo apt update sudo apt install -y software-properties-common sudo add-apt-repository -y ppa:openvswitch/stable sudo apt update sudo apt install -y openvswitch-switch openvswitch-common安装完成后验证OVS服务状态sudo systemctl status ovs-vswitchd # 应显示 active (running) sudo ovs-vsctl --version # 输出应为 ovs-vsctl 2.17.x注意不要使用apt install openvswitch-datapath-dkms手动编译内核模块。OVS 2.17已默认使用上游Linux内核的openvswitch模块自5.10起已合并手动编译反而容易因内核版本不匹配导致modprobe: FATAL: Module openvswitch not found错误。只需确保内核版本≥5.10即可。3.2 创建OVS桥与VXLAN隧道端口在node1上创建集成桥br-int和隧道桥br-tun并添加VXLAN端口指向node2# 创建桥 sudo ovs-vsctl add-br br-int sudo ovs-vsctl add-br br-tun # 为br-int添加一个内部端口用于后续连接虚拟机 sudo ovs-vsctl add-port br-int patch-int -- set Interface patch-int typepatch options:peerpatch-tun # 为br-tun添加一个内部端口与br-int对接 sudo ovs-vsctl add-port br-tun patch-tun -- set Interface patch-tun typepatch options:peerpatch-int # 添加VXLAN端口指向node2的IP sudo ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 typevxlan options:remote_ip192.168.56.11 options:key100在node2上执行对称操作VXLAN端口指向node1sudo ovs-vsctl add-br br-int sudo ovs-vsctl add-br br-tun sudo ovs-vsctl add-port br-int patch-int -- set Interface patch-int typepatch options:peerpatch-tun sudo ovs-vsctl add-port br-tun patch-tun -- set Interface patch-tun typepatch options:peerpatch-int sudo ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 typevxlan options:remote_ip192.168.56.10 options:key100执行完毕后用sudo ovs-vsctl show检查桥结构是否正确。你应该看到类似输出Bridge br-int Port br-int Interface br-int type: internal Port patch-int Interface patch-int type: patch options: {peerpatch-tun} Bridge br-tun Port br-tun Interface br-tun type: internal Port patch-tun Interface patch-tun type: patch options: {peerpatch-int} Port vxlan0 Interface vxlan0 type: vxlan options: {key100, remote_ip192.168.56.11}此时两个节点间的VXLAN隧道逻辑已建立但尚未配置任何流表数据还无法流通。3.3 手动注入OpenFlow流表实现VXLAN转发现在进入最关键的一步用ovs-ofctl手动下发流表让OVS知道如何处理VXLAN包。我们在node1上操作node2同理只需替换IP和端口号。首先清除所有现有流表避免干扰sudo ovs-ofctl del-flows br-int sudo ovs-ofctl del-flows br-tun然后为br-int配置二层学习流表Table 0# 允许ARP广播泛洪 sudo ovs-ofctl add-flow br-int table0, priority100, arp, actionsNORMAL # 允许IP包走NORMAL路径触发学习 sudo ovs-ofctl add-flow br-int table0, priority90, ip, actionsNORMAL # 默认丢弃其他包 sudo ovs-ofctl add-flow br-int table0, priority0, actionsdrop接着为br-tun配置VXLAN封装/解封装流表# Table 0: 匹配VXLAN入向包解封装并跳转 sudo ovs-ofctl add-flow br-tun table0, priority100, in_port2, dl_type0x0800, nw_proto17, tp_dst5242, actionsload:0x64-NXM_NX_TUN_ID[], resubmit(,10) # Table 10: 解封装后根据VNI映射VLAN ID并转发到br-int sudo ovs-ofctl add-flow br-tun table10, priority100, tun_id0x64, actionsmod_vlan_vid:100, output:1 # Table 20: 对从br-int来的包根据VLAN ID查MAC表若命中则封装VXLAN sudo ovs-ofctl add-flow br-tun table20, priority100, dl_vlan100, actionsstrip_vlan, load:0x64-NXM_NX_TUN_ID[], set_field:192.168.56.11-ip_dst, output:2这里的关键参数解释in_port2br-tun上patch-tun端口的编号可通过ovs-ofctl show br-tun查看通常为1或2tun_id0x64十六进制的VNI 100output:1br-tun上patch-tun端口的编号output:2br-tun上vxlan0端口的编号。执行完流表后用ovs-ofctl dump-flows br-tun确认流表已加载。此时隧道已具备基本转发能力。3.4 创建虚拟机并验证VXLAN连通性最后我们创建两个简单的网络命名空间netns模拟虚拟机在node1上# 创建netns sudo ip netns add vm1 # 创建veth pair sudo ip link add vm1-eth0 type veth peer name br-vm1 # 将br-vm1加入br-int sudo ovs-vsctl add-port br-int br-vm1 # 将vm1-eth0放入vm1 netns sudo ip link set vm1-eth0 netns vm1 # 配置IP sudo ip netns exec vm1 ip addr add 10.0.100.10/24 dev vm1-eth0 sudo ip netns exec vm1 ip link set vm1-eth0 up sudo ip netns exec vm1 ip link set lo up在node2上创建vm2IP为10.0.100.11/24。然后测试连通性# 在node1上 sudo ip netns exec vm1 ping -c 3 10.0.100.11 # 应返回3个reply且延迟在1-2ms抓包验证VXLAN封装# 在node1物理网卡上抓包 sudo tcpdump -i eth0 -nn port 5242 -w vxlan.pcap # 然后在vm1中ping vm2 sudo ip netns exec vm1 ping -c 1 10.0.100.11 # 用Wireshark打开vxlan.pcap应看到UDP包Payload为VXLAN头原始以太网帧如果ping通且抓包看到VXLAN包恭喜你一个最小化的OVSVXLAN环境已成功运行。这个过程看似繁琐但它强迫你直面每个组件的作用ovs-vsctl管拓扑ovs-ofctl管转发逻辑VXLAN端口管隧道缺一不可。4. 生产环境避坑指南那些文档里不会写的实战经验OVS的文档ovs-vswitchd.conf.db.5写得非常严谨但现实中的故障往往发生在文档的空白地带。过去三年我帮二十多家企业排查过OVS相关问题总结出以下五条血泪经验每一条都来自真实踩坑现场绝非纸上谈兵。4.1 “OVSDB连接超时”不是网络问题而是锁竞争现象OpenStack环境中Neutron服务频繁报错Unable to connect to OVSDB: timeout但telnet node1 6640测试端口通畅ovs-vsctl show也能正常返回。真相OVSDB server采用单线程处理所有RPC请求当某个client如Ansible playbook发起一个耗时长的事务如批量删除1000个端口它会阻塞整个server队列。后续所有请求都在排队等待最终超时。这不是网络延迟而是OVSDB的串行设计瓶颈。解决方案永远使用--timeout5参数ovs-vsctl --timeout5 set Bridge br-int other_config:hwaddr...避免单个命令拖垮全局批量操作改用ovsdb-tool对于大量配置先用ovsdb-tool transact生成JSON事务文件再一次性提交比逐条ovs-vsctl快10倍监控OVSDB队列长度sudo ovs-appctl -t /var/run/openvswitch/db.sock ovsdb-server/status | grep queue length持续5需告警。4.2 VXLAN的“黑洞路由”为什么ping通但TCP不通现象VXLAN网络中ping和arping完全正常但curl http://10.0.100.11始终超时tcpdump显示SYN包发出但无SYN-ACK返回。根因Linux内核的rp_filter反向路径过滤开启。当VXLAN包从物理网卡eth0进入内核检查回包路径目标IP10.0.100.11属于br-int网段但回包却要从eth0发出因为VXLAN隧道出口是eth0违反“入向接口出向接口”的严格检查直接丢弃。验证方法# 查看当前rp_filter设置 sysctl net.ipv4.conf.eth0.rp_filter # 若为2strict mode则触发此问题永久修复echo net.ipv4.conf.eth0.rp_filter 0 | sudo tee -a /etc/sysctl.conf sudo sysctl -p注意不要全局关闭rp_filternet.ipv4.conf.all.rp_filter0这会降低安全性。只针对VXLAN隧道使用的物理网卡关闭即可。4.3 OVS流表“老化”陷阱为什么MAC表突然清空现象OVS网络运行数小时后虚拟机间通信突然中断ovs-ofctl dump-flows br-int显示n_packets0的流表项激增ovs-appctl fdb/show br-int显示MAC地址表为空。原因OVS默认启用MAC地址老化aging超时时间300秒。当虚拟机长时间静默如休眠、无业务流量其MAC条目被自动删除。而OpenFlow流表中若没有learn动作或NORMAL行为OVS不会主动学习新MAC导致后续流量无匹配流表全部丢弃。规避方案强制禁用老化适用于稳定环境sudo ovs-vsctl set Bridge br-int other_config:mac-table-size0启用动态学习推荐在br-int的Table 0中用learn动作替代NORMALsudo ovs-ofctl add-flow br-int table0, priority100, in_port1, dl_src00:00:00:00:00:01, actionslearn(table10, hard_timeout300, priority100, NXM_OF_VLAN_TCI[0..11], NXM_OF_ETH_DST[]NXM_OF_ETH_SRC[], load:NXM_OF_IN_PORT[]-NXM_OF_VLAN_TCI[0..11]), output:2这条规则的意思是“当从端口1收到源MAC为00:00:00:00:00:01的包就学习它的MAC和入端口存入Table 10超时300秒”比NORMAL更可控。4.4 物理网卡offload导致VXLAN校验和错误现象VXLAN网络中大文件传输如scp出现随机丢包ethtool -S eth0 | grep tx显示tx_vxlan_tso_packets计数异常高但tx_errors也同步上升。根源现代网卡支持VXLAN TSOTCP Segmentation Offload它试图在网卡硬件层面完成VXLAN封装和TCP分段。但OVS内核模块与某些网卡驱动尤其是Mellanox CX系列存在兼容性问题导致外层UDP校验和计算错误接收端丢弃整个包。诊断命令# 查看网卡offload状态 ethtool -k eth0 | grep vxlan # 若显示on则尝试关闭 sudo ethtool -K eth0 vxlan off实测效果关闭VXLAN offload后scp传输成功率从70%提升至100%CPU占用仅增加3%完全可接受。记住在OVS环境中网卡offload不是越多越好而是越少越稳。4.5 OVS日志“静默失败”如何捕获被吞掉的错误现象ovs-vsctl add-port br-int xxx命令无报错返回但ovs-vsctl show里看不到新端口也没有任何日志输出。原因OVS daemon默认日志级别为INFO许多关键错误如内核模块加载失败、netdev创建权限不足被降级为DBG级别不写入/var/log/openvswitch/ovs-vswitchd.log。调试方法临时提升日志级别sudo ovs-appctl -t /var/run/openvswitch/ovs-vswitchd.pid vlog/set ovsrcmd:dbg sudo ovs-appctl -t /var/run/openvswitch/ovs-vswitchd.pid vlog/set ofproto_dpif:dbg实时跟踪日志sudo tail -f /var/log/openvswitch/ovs-vswitchd.log | grep -E (error|fail|reject)检查内核日志dmesg | grep -i openvswitch # 常见错误如openvswitch: could not create datapath提示内核模块未加载5. OVS性能调优实战从理论带宽到实测吞吐的跨越OVS的标称性能如“10G线速”和实际业务吞吐之间往往隔着一层看不见的优化鸿沟。我见过太多团队买了万兆网卡却只跑出3Gbps的VXLAN吞吐归咎于“OVS性能不行”。其实90%的情况是没做基础调优。下面分享一套经过金融、电信客户验证的调优清单每一步都有量化收益。5.1 内核参数调优释放网络栈潜力OVS运行在Linux内核之上其性能直接受内核网络参数影响。以下参数针对VXLAN场景优化参数默认值推荐值作用预期收益net.core.somaxconn12865535TCP连接队列长度防止SYN Flood导致连接拒绝net.ipv4.tcp_rmem4096 65536 41943044096 262144 16777216TCP接收缓冲区提升大文件传输吞吐net.ipv4.ip_forward01启用IP转发VXLAN解封装必需net.bridge.bridge-nf-call-iptables10关闭桥接iptables钩子避免OVS包被iptables二次处理应用命令echo net.core.somaxconn 65535 | sudo tee -a /etc/sysctl.conf echo net.ipv4.tcp_rmem 4096 262144 16777216 | sudo tee -a /etc/sysctl.conf echo net.ipv4.ip_forward 1 | sudo tee -a /etc/sysctl.conf echo net.bridge.bridge-nf-call-iptables 0 | sudo tee -a /etc/sysctl.conf sudo sysctl -p实测对比某银行核心交易系统应用此调优后VXLAN网络TPS每秒事务数从8500提升至1250047%。5.2 OVS专用参数让数据平面更专注OVS daemon自身有一系列性能参数通过/etc/default/openvswitch-switch配置# 启用多队列绑定到CPU核心 OVS_DAEMON_OPTS--dpdk-init --dpdk-lcore-mask 0x3 --dpdk-socket-mem 1024,0 # 或传统内核模式更通用 OVS_DAEMON_OPTS--enable-dpdkfalse --max-backers1024 --n-handler-threads4关键参数解读--n-handler-threads4指定4个线程处理数据包应等于物理CPU核心数--max-backers1024增大端口backer缓存避免高并发端口创建失败--enable-dpdkfalseDPDK虽快但要求独占CPU且配置复杂生产环境首推内核模式。重启生效sudo systemctl restart openvswitch-switch5.3 NUMA感知部署避免跨NUMA内存访问在多路服务器上OVS进程若被调度到远离物理网卡的NUMA节点会导致内存访问延迟飙升。用numactl绑定# 查看网卡所在NUMA节点 lspci -vv -s $(lspci | grep Ethernet | head -1 | awk {print $1}) | grep NUMA node # 假设输出为NUMA node: 0 # 启动OVS时绑定 sudo numactl --cpunodebind0 --membind0 /usr/share/openvswitch/scripts/ovs-ctl start收益延迟敏感型业务如高频交易P99延迟从120μs降至45μs。5.4 流表优化减少匹配开销流表是OVS的性能热点。避免使用priority0, actionsdrop这种兜底规则它会强制扫描所有流表。改为精确匹配# 错误全局兜底 ovs-ofctl add-flow br-int priority0, actionsdrop # 正确按协议细分 ovs-ofctl add-flow br-int priority10, icmp, actionsdrop ovs-ofctl add-flow br-int priority10, arp, actionsdrop ovs-ofctl add-flow br-int priority10, ip, nw_dst0.0.0.0/0, actionsdrop同时定期清理无用流表# 删除超过1小时未匹配的流 ovs-ofctl dump-flows br-int --no-stats | awk $3 ~ /n_packets0/ $4 ~ /idle_age[0-9]/ {split($4,a,); if(a[2]0 3600) print $2} | xargs -I {} ovs-ofctl del-flows br-int {}6. OVS未来演进eBPF、AF_XDP与云原生网络的融合OVS没有停下脚步。2023年发布的OVS 3.0正悄然将eBPFextended Berkeley Packet Filter深度集成这不仅是性能升级更是架构范式的转移。理解这一趋势能帮你避开未来的技术债。6.1 eBPF从内核模块到可编程沙盒传统OVS依赖openvswitch内核模块所有转发逻辑固化在C代码中升级需重新编译内核。而eBPF允许将转发逻辑如VXLAN解封装、ACL过滤编译为字节码安全地加载到内核eBPF虚拟机中。优势在于热更新无需重启OVS daemonovs-ofctl下发新eBPF程序即可生效细粒度控制可对单个流表项绑定eBPF程序实现“每个租户不同QoS策略”可观测性eBPF程序可内置perf event实时采集每个包的处理路径、延迟。实测数据在同等硬件上eBPF版OVS处理VXLAN的P95延迟从8.2μs降至3.1μs抖动降低60%。6.2 AF_XDP绕过协议栈的终极加速AF_XDP是Linux 5.4引入的高速数据面API它让OVS能直接从网卡DMA缓冲区收发包彻底绕过sk_buff分配、协议栈解析等开销。在OVS 3.0中ovs-vswitchd已支持--xdp-modeskb和--xdp-modenative两种模式skb模式兼容性好仍走部分协议栈native模式极致性能但要求网卡驱动支持Intel ixgbe、i40e已支持。部署命令ovs-vsctl set Open_vSwitch . other_config:xdp-modenative ovs-vsctl set Open_vSwitch . other_config:xdp-offloadtrue收益万兆网卡实测吞吐达9.8GbpsCPU占用率从35%降至12%。6.3 云原生集成OVS作为K8s CNI的底层引擎Kubernetes社区正推动OVS成为下一代CNIContainer Network Interface标准。项目如ovn-kubernetes已将OVS与OVNOpen Virtual Network深度整合提供原生NetworkPolicy、Service LoadBalancer、Gateway等功能。这意味着你不再需要kube-proxyiptablesOVS流表直接实现Service转发NetworkPolicy策略可编译为eBPF程序毫秒级生效多集群网络互联通过OVS的geneve隧道VXLAN的升级版实现。我的建议如果你
返回列表