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呢?我个人总结了几个场景:

  1. 你需要做VLAN隔离:特别是多租户环境,每个租户一个VLAN,OVS的Trunk配置比Linux Bridge灵活得多。
  2. 你需要跨主机通信:比如用VXLAN隧道把不同物理机上的虚拟机连到同一个二层网络。Linux Bridge做不到,OVS是标配。
  3. 你需要SDN控制:如果你的网络需要集中控制、动态调整,OVS配合OpenFlow协议是绝配。
  4. 你追求高性能:OVS支持DPDK加速,可以跑到线速。Linux Bridge在高压下容易丢包。

当然,也不是说Linux Bridge一无是处。如果你只是做简单的容器网络,或者测试环境只有几台机器,Linux Bridge完全够用,而且配置更简单。但如果你要上生产环境,尤其是涉及到VLAN隔离和Trunk,我建议你直接上OVS。

一句话总结:OVS是“瑞士军刀”,功能强大但需要学习成本;Linux Bridge是“水果刀”,简单直接但功能有限。选哪个,看你的需求。

好了,第一课就到这里。下一节我们开始动手安装OVS,并且配置第一个VLAN隔离网络。到时候我会带着你一步步操作,把今天讲的理论用起来。

记住,学网络没有捷径,但跟着有经验的人走,能少踩很多坑。咱们下节课见。


公众号:蓝海资料掘金营,微信deep3321