目前飞牛官方并没有开发虚拟机的网络限速功能,但可以利用 OVS 原生 QoS 功能实现网络限速。(要求 OVS≥2.5 且支持 HTB )
# 查找虚拟机对应的 OVS 端口(如tap53eeb988-c7)
ovs-vsctl show
输出示例,可以看到虚拟机的接口是 vnet2,属于网桥 enp3s0-ovs,OVS 版本为 3.1.0
root@**Marker:~# ovs-vsctl show
19d20c10-43b1-4509-82d6-bcc1bf2cd08e
Bridge enp3s0-ovs
Port enp3s0
Interface enp3s0
Port enp3s0-ovs
Interface enp3s0-ovs
type: internal
Port vnet2
Interface vnet2
ovs\_version: "3.1.0"
创建 QoS 策略并绑定到虚拟机端口
# 创建QoS策略(最大速率35Mbps)并关联队列
# 虚拟机的下载速度限制(对于 vnet2 端口来说是发送)
ovs-vsctl -- set port vnet2 qos=@newqos \
-- --id=@newqos create qos type=linux-htb other-config:max-rate=35000000 \
-- --id=@q0 create queue other-config:max-rate=35000000
# 虚拟机的上传速度限制(对于 vnet2 端口来说是接收)
ovs-vsctl set interface vnet2 ingress_policing_rate=35000 \
ingress_policing_burst=3500
- OVS配置默认自动保存至数据库,重启后无需重新配置
- 关键参数说明:
type=linux-htb
:使用分层令牌桶算法实现精确限速
max-rate=35000000
:对应 35Mbps(单位:bit/s)
queue
:每个队列对应一个限速规则,
other-config:max-rate
需与 QoS 的 max-rate
一致
ingress_policing_rate
:下载限速35Mbps(单位Kbps)(注意两边单位是不一样的)
ingress_policing_burst
:突发值=限速的10%
(可选)允许虚拟机短时突发下载流量
添加 burst
参数:
ovs-vsctl set qos <QoS_UUID> other-config:burst=3500000 # 突发值=限速的10%(这里设置为 3.5Mbps)
验证配置生效
# 查看端口QoS绑定状态
ovs-vsctl list port vnet2 | grep qos
# 查看QoS策略详细信息
ovs-vsctl list qos
# 查看队列参数
ovs-vsctl list queue
# 查看端口统计(含突发包计数)
ovs-appctl dpctl/show -s
# 查看ingress限速统计(Kbps单位)
ovs-vsctl list interface vnet2 | grep policing
预期输出:qos
字段应显示 UUID
,且 other_config:max-rate
值为 35000000
(回滚)恢复默认状态
# 消除 vnet2 端口的下载速度限制
ovs-vsctl clear port vnet2 qos
ovs-vsctl destroy qos <QoS_UUID>
# 消除上传速度限制
ovs-vsctl set interface vnet2 ingress_policing_rate=0 \
ingress_policing_burst=0