1、OVS初识:什么是Open vSwitch、OVS的核心架构、OVS与Linux Bridge的区别
各位同学,咱们今天正式开讲《Open vSwitch VLAN隔离与Trunk网络配置实战》的第一课。
说实话,每次带新人入门,我第一个要问的就是:你知不知道OVS到底是什么?很多人上来就查命令、配流表,结果遇到问题一头雾水。我个人习惯是,先把底层的逻辑理清楚,再动手操作。这样出了问题,你至少知道该往哪个方向排查。
1.1 什么是Open vSwitch?
Open vSwitch,简称OVS,是一个开源的虚拟交换机软件。说白了,它就是在服务器里用软件模拟出来的一个交换机。
你想想看,物理交换机有几十个端口,能转发数据包,能划分VLAN,能做链路聚合。OVS在虚拟化环境里干的就是同样的事。只不过它的端口连接的不是网线,而是虚拟机、容器或者物理网卡。
核心定位:OVS是虚拟网络世界的“高速公路立交桥”。它负责把数据包从A点送到B点,并且在这个过程中可以做各种策略控制。
我记得最早接触OVS是在2012年,那时候OpenStack刚火起来。当时有个项目需要做多租户网络隔离,用Linux Bridge折腾了好几天,性能上不去,配置也复杂。后来换成OVS,配合VLAN和隧道技术,问题一下子就解决了。嗯,从那以后,我对OVS就特别有好感。
1.2 OVS的核心架构
OVS的架构设计得挺巧妙的。它不像Linux Bridge那样“一把抓”,而是分成了几个层次。我画个简单的逻辑图给你看:
+------------------+
| ovs-vswitchd | ← 用户态守护进程,负责流表管理、学习
+------------------+
|
+------------------+
| ovsdb-server | ← 存储配置信息(数据库)
+------------------+
|
+------------------+
| ovs.ko (内核模块) | ← 内核态快速转发
+------------------+
|
+------------------+
| 物理网卡/虚拟端口 |
+------------------+
这里有几个关键组件,我一个个说:
- ovs-vswitchd:这是OVS的大脑。它运行在用户态,负责处理流表、学习MAC地址、实现各种协议(比如STP、LACP)。说白了,所有“聪明”的决策都是它做的。
- ovsdb-server:这是OVS的“记事本”。它用数据库保存交换机的配置,比如你创建了多少个网桥、每个网桥有哪些端口、VLAN怎么划分。重启后配置不会丢,全靠它。
- ovs.ko:这是内核模块,负责数据包的快速转发。你想想看,如果每个包都要跑到用户态去处理,那性能得多差?所以OVS把大部分数据转发工作放在内核里完成,只有遇到复杂规则时才交给用户态。
我的经验:刚开始学OVS时,很多人搞不清ovs-vswitchd和ovs.ko的关系。其实很简单:ovs.ko负责“快跑”,ovs-vswitchd负责“动脑子”。遇到新流量,内核搞不定,就上报给用户态,用户态学完后下发给内核,下次同样的流量就直接在内核转发了。
1.3 OVS与Linux Bridge的区别
这个问题我几乎每次培训都会被问到。两者都是Linux下的虚拟交换机,但设计理念完全不同。
| 对比项 | Open vSwitch | Linux Bridge |
|---|---|---|
| 设计目标 | 大规模虚拟化网络、SDN | 简单的二层桥接 |
| 转发方式 | 流表匹配(灵活可编程) | MAC地址学习+泛洪 |
| VLAN支持 | 802.1Q Trunk、QinQ、VLAN转换 | 基本VLAN过滤 |
| 隧道技术 | VXLAN、GRE、Geneve等 | 不支持(需额外工具) |
| 性能 | 内核态转发,支持DPDK加速 | 内核态转发,功能简单 |
| 管理工具 | ovs-vsctl、ovs-ofctl | brctl、ip link |
| 适用场景 | 数据中心、OpenStack、K8s | 简单容器网络、小规模环境 |
我举个例子你就明白了。假设你要做一个VLAN隔离,两个虚拟机分别属于VLAN 10和VLAN 20:
- 用Linux Bridge:你得手动创建两个网桥,每个网桥绑定一个VLAN子接口。配置繁琐,而且扩展性差。我曾经在一个项目里用Linux Bridge管理50个VLAN,那配置文件看得我眼花缭乱。
- 用OVS:一个网桥搞定。你只需要在端口上打上VLAN tag,流表自动处理。想加VLAN?一条命令的事。想改VLAN?也是秒级生效。
避坑指南:我曾经遇到过一个案例,有人用Linux Bridge做VLAN Trunk,结果发现不同VLAN的流量串了。排查了半天,原来是Linux Bridge对802.1Q Trunk的支持不够完善,某些场景下会误转发。后来换成OVS,问题立刻解决。所以,如果你要玩VLAN隔离,尤其是Trunk场景,直接上OVS,别犹豫。
1.4 什么时候该用OVS?
说了这么多区别,那到底什么时候该用OVS呢?我个人总结了几个场景:
- 你需要做VLAN隔离:特别是多租户环境,每个租户一个VLAN,OVS的Trunk配置比Linux Bridge灵活得多。
- 你需要跨主机通信:比如用VXLAN隧道把不同物理机上的虚拟机连到同一个二层网络。Linux Bridge做不到,OVS是标配。
- 你需要SDN控制:如果你的网络需要集中控制、动态调整,OVS配合OpenFlow协议是绝配。
- 你追求高性能:OVS支持DPDK加速,可以跑到线速。Linux Bridge在高压下容易丢包。
当然,也不是说Linux Bridge一无是处。如果你只是做简单的容器网络,或者测试环境只有几台机器,Linux Bridge完全够用,而且配置更简单。但如果你要上生产环境,尤其是涉及到VLAN隔离和Trunk,我建议你直接上OVS。
一句话总结:OVS是“瑞士军刀”,功能强大但需要学习成本;Linux Bridge是“水果刀”,简单直接但功能有限。选哪个,看你的需求。
好了,第一课就到这里。下一节我们开始动手安装OVS,并且配置第一个VLAN隔离网络。到时候我会带着你一步步操作,把今天讲的理论用起来。
记住,学网络没有捷径,但跟着有经验的人走,能少踩很多坑。咱们下节课见。
公众号:蓝海资料掘金营,微信deep3321