3. OVS安装与部署:源码编译、包管理器安装、Docker部署
好,咱们进入实战环节。安装OVS,说白了就是给你的网络环境装上一把“瑞士军刀”。但怎么装,这里头门道不少。我个人习惯是,先搞清楚你要在什么场景下用,再选安装方式。别一上来就源码编译,那玩意儿费时费力,有时候还不一定适合你。
今天咱们聊三种主流方式:源码编译、包管理器安装、Docker部署。每种都有它的脾气,咱们一个一个捋。
3.1 源码编译安装:最灵活,也最折腾
为什么要源码编译?说白了,就是你要定制。比如你想打个补丁,或者想用最新的开发版特性,那包管理器里的版本肯定满足不了你。我在项目里遇到过,客户非要一个还没正式发布的bugfix,那没办法,只能源码编译。
嗯,这里要注意,源码编译对系统环境有要求。你想想看,编译工具链、依赖库,一个都不能少。我刚开始搞的时候,经常因为缺个库卡半天。
3.1.1 环境准备
先装基础工具。以Ubuntu为例,我建议你直接跑下面这条命令,省心:
sudo apt-get update
sudo apt-get install -y build-essential fakeroot debhelper \
autoconf automake bison flex libssl-dev \
libtool pkg-config python3 python3-pip
这里头,build-essential是编译必备,libssl-dev是OpenFlow安全连接用的。缺了它,你后面配SSL连接时会报错。我曾经就因为这个折腾了一下午,后来发现是依赖没装全。
3.1.2 下载与编译
去OVS官网或者GitHub拉源码。我个人习惯用GitHub,版本更新快:
git clone https://github.com/openvswitch/ovs.git
cd ovs
git checkout v2.17.0 # 选一个稳定版本
然后就是经典的“三件套”:
./boot.sh
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
make -j$(nproc)
sudo make install
这里有个坑:--prefix参数决定了OVS装到哪。如果你不指定,默认是/usr/local。但很多系统脚本默认去/usr找,所以建议像我这样指定一下,省得后面路径对不上。
python3-sphinx,结果make到一半报文档生成错误。如果你不需要文档,可以加--disable-ssl跳过,但我不建议这么做——生产环境SSL几乎是必须的。
3.1.3 初始化与启动
编译完别急着用,先初始化数据库:
sudo ovsdb-tool create /etc/openvswitch/conf.db \
/usr/share/openvswitch/vswitch.ovsschema
然后启动OVSDB服务:
sudo ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach
最后启动vswitchd:
sudo ovs-vswitchd --pidfile --detach
检查一下是否跑起来了:
sudo ovs-vsctl show
如果看到类似a4b6c7d8-... (ovn)的输出,恭喜你,成了。
3.2 包管理器安装:省心省力,适合快速上手
说实话,如果你只是学习或者做实验,包管理器安装是最省心的。你想想看,一条命令搞定所有依赖,多爽。
3.2.1 Ubuntu/Debian系
sudo apt-get install openvswitch-switch openvswitch-common
装完直接就能用:
sudo systemctl start openvswitch-switch
sudo systemctl enable openvswitch-switch
嗯,这里要注意,包管理器安装的版本通常比源码落后几个小版本。比如现在源码已经到2.17了,apt里可能还是2.15。但稳定性没问题,毕竟经过了发行版测试。
3.2.2 CentOS/RHEL系
sudo yum install -y openvswitch
sudo systemctl start openvswitch
sudo systemctl enable openvswitch
CentOS的包名简单,就叫openvswitch。但有个坑:默认的EPEL源里可能没有最新版。我建议你加一下RDO仓库:
sudo yum install -y centos-release-openstack-train
sudo yum install -y openvswitch
ovs-vsctl --version看看版本号。如果版本太老,比如低于2.13,建议还是用源码编译。因为有些新特性(比如CT流表)在老版本里不支持。
3.3 Docker部署:隔离性好,适合微服务场景
现在Docker这么火,OVS当然也能容器化。我个人觉得,Docker部署最大的好处是干净——不会污染你的宿主机环境。我在做CI/CD流水线时,就喜欢用Docker跑OVS,用完就删,省心。
3.3.1 拉取镜像
官方镜像在Docker Hub上:
docker pull openvswitch/ovs:latest
或者指定版本:
docker pull openvswitch/ovs:2.17.0
3.3.2 启动容器
启动方式有点讲究。因为OVS需要操作内核模块,所以得给容器一些特权:
docker run -d --name ovs \
--privileged \
--network host \
-v /var/run/openvswitch:/var/run/openvswitch \
openvswitch/ovs:latest
这里几个参数解释一下:
--privileged:给容器操作内核的权限,不然OVS加载不了内核模块--network host:使用宿主机网络,这样OVS能直接管理物理网卡-v:挂载socket目录,方便宿主机上的其他工具(比如ovs-vsctl)与容器内的OVS通信
--privileged可能不管用。因为Docker Desktop底层是虚拟机,不支持直接操作宿主机内核。这时候我建议你改用包管理器安装,或者用虚拟机跑Linux。
3.3.3 验证容器内的OVS
进入容器看看:
docker exec -it ovs bash
ovs-vsctl show
如果一切正常,你会看到空的OVS数据库。然后你就可以在容器里创建网桥、配置流表了。
不过要注意,容器重启后,你配置的流表会丢失。所以生产环境建议把配置持久化,或者写个启动脚本。
3.4 三种方式对比
最后,我整理了个表格,方便你根据场景选择:
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 源码编译 | 版本最新、可定制、可打补丁 | 编译耗时、依赖多、升级麻烦 | 开发调试、特性验证、生产环境定制 |
| 包管理器 | 安装简单、依赖自动解决、升级方便 | 版本滞后、无法定制 | 学习实验、快速部署、生产环境标准版 |
| Docker部署 | 环境隔离、部署快速、易于清理 | 需要特权模式、性能有损耗、配置不持久 | CI/CD测试、微服务环境、临时实验 |
我个人建议:如果你是初学者,先用包管理器装一个,跑通基本功能。等熟悉了,再尝试源码编译,体验一下定制化的乐趣。至于Docker,适合你已经有了一定基础,想在隔离环境里做测试的时候用。
好了,这一章就到这。下一章咱们聊聊OVS的基本配置,包括创建网桥、添加端口、配置VLAN这些实战操作。到时候我会拿一个真实的网络拓扑来演示,保证你学完就能上手。