04
2024
06
23:10:09

安装Open vSwitch(入门级操作) OpenvSwitch基础命令

根据前面学习的RFC:7047 OVSDB管理协议的规范,可以了解到OVSDB管理协议主要是管理OVS交换机的OVSDB数据库,OVSDB架构如图所示:



OVS包含三个重要的组件:OVSDB-Server、OVS-vSwitchd以及OVS内核模块:

  • OVSDB-Server:OVS的数据库服务器端,用于存储虚拟交换机的配置信息(比如网桥、端口等),为控制器和OVS-vSwitchd提供OVSDB操作接口。OVSDB位于OVS本地,OVSDB-server对应的客户端可以是控制器,通过OVSDB 管理协议向OVSDB-Server端发送数据库配置和查询的命令;也可以是运行在Open vSwitch本地的命令行工具,即管理员可以在OVS本地以命令行方式输入数据库配置和查询命令。

  • OVS-vSwitchd:OVS的核心组件,OVS守护进程,负责保存和管理控制器下发的所有流表,为OVS的内核模块提供流表查询功能,并为控制器提供OpenFlow协议的操作接口。

  • OVS内核模块:缓存某些常用流表,并负责数据包转发(由转发部分Forwarding Path负责),当遇到无法匹配的报文,该模块将向OVS-vSwitchd发送请求,获取报文处理指令。OVS内核模块可以实现多个datapath,每个datapath可以有多个vport。

简单理解就是OVSDB-Server管配置、OVS-vSwitchd管流表,内核管转发。

接下来根据OVS的官网openvswitch.org/ 中的指导文档来完成其安装。

根据官网说明,可以选择从源安装和从包安装,下面以从源安装为例:


1.下载版本

openvswitch.org/downloa下载版本,上传至系统并解压:




2.生成编译文件makefile

进入解压后的目录,执行

./configure







3.构建makefile

从执行./configure的目录中执行make,构建Open vSwitch 用户空间以及内核模块:

make







4. install 安装

安装openvswitch

make install







如果构建了内核模块,可以重新编译安装

make modules_install





5.加载到内核

加载openvswitch到内核模块

/sbin/modprobe openvswitch

并检查是否加载成功:

/sbin/lsmod | grep openvswitch





6.启动相关服务以及数据库

Open vSwitch包括一个 shell 脚本和帮助程序,称为 ovs-ctl,它可以自动执行启动和停止 ovsdb-server 和 ovs-vswitchd 的大部分任务。可以使用 ovs-ctl程序启动守护程序。ovs-ctl 程序默认在“/usr/local/share/openvswitch/scripts”。如下图所示:



启动所有进程:

export PATH=$PATH:/usr/local/share/openvswitch/scriptsovs-ctl start



根据提示可以看到,start命令会按顺序依次启动ovsdb-server 和 ovs-vswitchd的进程,启动ovsdb-server前会先检查是否有数据库。若无数据库会提示不存在并创建一个新的空数据库。

ovs-ctl 脚本允许使用特定选项单独启动/停止守护进程。只启动 ovsdb-server

export PATH=$PATH:/usr/local/share/openvswitch/scriptsovs-ctl --no-ovs-vswitchd start

由于前面已启动,此处会提示already running:



同样,只启动 ovs-vswitchd:

export PATH=$PATH:/usr/local/share/openvswitch/scriptsovs-ctl --no-ovsdb-server start

依旧提示already running,这里命令还是比较好理解的,启动时no掉其中一个进程,就是只启动另外一个进程了。



根据启动进程顺序,在ovsdb-server启动之前,需配置一个可用的数据库:

mkdir -p /usr/local/etc/openvswitchovsdb-tool create /usr/local/etc/openvswitch/conf.db \ vswitchd/vswitch.ovsschema

此处报错是由于已经创建。



配置ovsdb-server使用上面创建的数据库,侦听Unix域套接字,连接到数据库本身指定的任何管理器,并在数据库中使用SSL配置:

mkdir -p /usr/local/var/run/openvswitchovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ --remote=db:Open_vSwitch,Open_vSwitch,manager_options \ --private-key=db:Open_vSwitch,SSL,private_key \ --certificate=db:Open_vSwitch,SSL,certificate \ --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \ --pidfile --detach --log-file



提示ovsdb-server已经运行,aborting异常中止。所以我这里ovs-ctl stop将进程停止,然后删除自动创建的数据库,然后再重新配置可用数据库:






创建数据库并配置ovsdb-server使用后,初始化数据库,仅在使用 ovsdb-tool 创建数据库后第一次需要:

ovs-vsctl--no-waitinit



启动主 Open vSwitch 守护进程,并连接到同一个 Unix 域套接字:

ovs-vswitchd --pidfile --detach --log-file



根据前面操作,正常顺序即:


7.验证

现在就可以查看版本,添加网桥等。





在前面的我们安装好了OpenvSwitch,一个 OVS 实例可以支持多个逻辑数据路径,即支持创建多个“网桥”。OVS交换机组成如图(图片来源于网络):



可以通过命令ovsdb-client dump将数据库结构打印出来。OVSDB中包含一系列记录网桥、端口、QoS等网络配置信息的表,这些表均以JSON格式保存。

今天先来看看一个使用频率很高的命令ovs-vsctl。

前面介绍到ovs-vsctl是ovs-vswitchd进程的管理程序。前面提到的网桥类似交换机,每个都可以有多个vport,vport就类似于是交换机的网口。



1.查看网桥信息


ovs-vsctl show 查看网桥信息



新安装的机器没有任何网桥信息,可以显示主机ID以及交换机版本信息,主机ID在连接控制器之后才会有作用。




2.添加网桥


ovs-vsctl add-br br0 添加网桥



可以看到创建后的网桥br0。网桥相当于物理交换机,根据流表,将端口收到的包转发至一个或多个端口。

Bridge br0:指网桥br0;

Port br0:指网桥br0的端口,端口名称是br0;这个和网桥同名的端口可以理解为环回口。

type: internal:表示端口类型。此时会发现操作系统中会创建一个虚机网卡br0(状态为down),此端口收到的所有数据包会将流量转发到这张网卡,这张网卡发出的数据会通过port br0这个端口进入ovs。当创建网桥时,默认会创建与网桥同名的internal port,并创建一个同名的Interface接口。

Interface br0:接口br0是ovs与外部交换数据包的组件,一个接口就是操作系统的一块网卡,这块网卡可能是Open vSwitch生成的虚拟网卡(本次情况),也可能是物理网卡挂载在Open vSwitch上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在Open vSwitch上。

配置虚拟网卡br0地址:

ip address add 192.168.83.132/24 dev br0






3.添加port


为操作物理网卡挂载在Open vSwitch上,又为该虚机添加了网卡ens36,将网卡ens36添加在网桥br0上:



ovs-vsctl list-br 列出所有网桥

ovs-vsctl list-ports br0 列出连接到网桥br0的所有网络接口

此时可以看到有两个port,两个接口:



查看ens36网络接口加入的网桥:

ovs-vsctl port-to-br ens36



删除ens36接口地址,网卡加入网桥后,就变成了二层接口,无需配置地址。



为了验证是通过br0连接,将ens33地址也删除,删除后,ssh立马连接就断开了,验证目前ssh是电脑本地网卡和虚机的ens33网卡通信的。



通过网桥br0管理地址连接虚机正常(需要手工up一下br0网卡,否则连接不上):



根据前面描述:此端口收到的所有数据包会将流量转发到这张网卡,这张网卡发出的数据会通过port br0这个端口进入ovs。目前流量从ens36接收后会通过桥转发到br0端口,将ens36接口down掉,网桥内br0端口应该收不到ssh请求。果然Down掉接口后连接立马断开:



此时对br0网卡抓包没有icmp流量,也无法ping通:



ifconfig ens36 up 开启ens36接口后,登录正常:






4.删除port及网桥


ovs-vsctl del-port br0 ens36 删除br0网桥的ens36 port

删除后,连接断开:



查看ovs信息,端口没有了:



如果删除port时不指明名字,那么将会删除全部的port。

ovs-vsctl del-br br0 删除网桥





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/6489.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


作者:hqy | 分类:Network | 浏览:288 | 评论:0
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: