一、OVS与KVM概述

1.1 什么是OVS?

Open vSwitch,简称OVS。说白了,它是一个开源的虚拟交换机。

你想想看,物理网络里有交换机,负责把数据包从一个端口转发到另一个端口。那虚拟化环境里呢?虚拟机之间怎么通信?OVS就是干这个的。

我最早接触OVS是在2012年,那时候还在用Linux Bridge。说实话,Linux Bridge功能太弱了,连基本的VLAN隔离都做得不够好。后来换成OVS,才真正体会到什么叫「专业的事交给专业的工具」。

OVS的核心能力包括:

  • 标准OpenFlow支持 — 你可以用SDN控制器来管理它
  • VLAN/VXLAN/GRE隧道 — 跨主机网络全靠它
  • 流表转发 — 比传统MAC学习更灵活
  • QoS限速 — 给虚拟机分配带宽
  • 端口镜像 — 抓包调试必备

一句话总结:OVS就是虚拟世界里的Cisco交换机,但比Cisco更灵活,因为它可编程。

1.2 什么是KVM?

KVM,全称Kernel-based Virtual Machine。它是Linux内核自带的一个虚拟化模块。

嗯,这里要注意:KVM本身不是一个完整的虚拟机软件。它只提供CPU和内存的虚拟化能力。你还需要QEMU来模拟设备、管理虚拟机生命周期。

我习惯把KVM+QEMU合起来叫KVM虚拟化。实际上,生产环境里99%的KVM部署都是这么干的。

KVM的优势很明显:

  • 性能接近原生 — 因为它是内核模块,直接利用硬件虚拟化扩展(Intel VT-x / AMD-V)
  • 免费开源 — 没有VMware那样的授权费用
  • 生态成熟 — libvirt、virt-manager、OpenStack都支持它
  • 稳定性高 — 我在生产环境跑过上千台KVM虚拟机,连续运行一年没出过问题

我的经验:如果你要搭建虚拟化平台,KVM是性价比最高的选择。别被那些商业软件忽悠了,KVM在性能上一点都不输。

1.3 为什么需要将OVS与KVM集成?

这个问题问得好。单独用KVM,虚拟机也能上网。那为什么还要加OVS?

我举个例子。假设你有两台物理服务器,每台上面跑了10台虚拟机。你想让Server1上的VM1和Server2上的VM2在同一个二层网络里,怎么办?

用Linux Bridge的话,你得手动配置VXLAN隧道,而且管理起来非常麻烦。用OVS呢?一条命令搞定:

# 在Server1上
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.1.2

# 在Server2上
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.1.1

看到了吗?OVS把跨主机的网络抽象成了一个虚拟交换机。你根本不用关心物理网络怎么走,OVS帮你搞定。

集成OVS和KVM的核心原因有三个:

  1. 网络隔离 — 不同租户的虚拟机可以划在不同的VLAN/VXLAN里
  2. 灵活转发 — 通过OpenFlow流表,你可以实现任意复杂的网络策略
  3. 统一管理 — 所有虚拟交换机的状态都可以通过OVSDB协议集中管理

避坑指南:我曾经在一个项目里直接用Linux Bridge做跨主机网络,结果VLAN数量超过1000个后,MAC表爆炸了。换成OVS后,流表方式轻松搞定。所以,规模超过10台宿主机,建议直接上OVS。

1.4 虚拟化网络的基本概念

在深入OVS和KVM集成之前,有几个基础概念你得先搞清楚。不然后面会听得云里雾里。

1.4.1 虚拟网卡(vNIC)

虚拟机里的网卡,本质上是宿主机上的一个虚拟设备。KVM支持多种虚拟网卡类型:

类型 性能 适用场景
e1000 一般 兼容性要求高的场景
virtio 大多数生产环境
vhost-net 极高 高性能网络场景

我个人强烈推荐用virtio。它性能好,而且Linux内核原生支持。Windows虚拟机的话,需要装驱动,但也不麻烦。

1.4.2 虚拟交换机(vSwitch)

就是前面说的OVS或者Linux Bridge。它负责把虚拟机的网卡连接起来,形成一个虚拟的二层网络。

你想想看,物理交换机有端口,虚拟交换机也有端口。只不过虚拟交换机的端口连接的是虚拟机的网卡,而不是物理网线。

1.4.3 隧道技术(Tunneling)

跨主机的虚拟机通信,靠的就是隧道。常见的隧道协议有:

  • VXLAN — 最常用,支持1600万个VNI(相当于VLAN ID的扩展)
  • GRE — 简单直接,但封装开销大
  • Geneve — 新一代隧道协议,灵活性更高

我记得有一次帮客户排查网络问题,发现VXLAN的MTU没配好,导致大包丢得一塌糊涂。嗯,这里提醒一下:用VXLAN隧道时,物理网卡的MTU要设成1500+50(VXLAN头部),不然会出问题。

1.4.4 流表(Flow Table)

这是OVS最核心的概念。传统交换机靠MAC地址表转发,OVS靠流表转发。

流表由一条条流表项组成,每条流表项包含:

  • 匹配条件 — 源MAC、目的MAC、IP、端口等
  • 动作 — 转发到某个端口、丢弃、修改头部等
  • 优先级 — 匹配顺序
  • 计数器 — 统计匹配了多少个包

说白了,流表就是一张规则表。数据包进来后,从上到下匹配,命中了就执行对应的动作。

核心理解:OVS的流表机制,让你可以像写程序一样控制网络。这是传统交换机做不到的。

1.5 本章小结

这一章我们聊了OVS是什么、KVM是什么,以及为什么要把它们集成在一起。还顺带讲了虚拟化网络的几个基本概念。

我个人觉得,理解这些基础概念比学会敲命令更重要。命令忘了可以查文档,但概念搞错了,后面整个架构都会出问题。

下一章,我们会动手搭建OVS环境,然后创建第一台连接到OVS的KVM虚拟机。到时候你就知道,这些东西到底是怎么配合工作的了。

学习建议:如果你现在手边有Linux服务器,建议装个KVM和OVS,跟着后面的章节一起动手。光看不练,等于白学。