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的官网http://www.openvswitch.org/ 中的指导文档来完成其安装。
根据官网说明,可以选择从源安装和从包安装,下面以从源安装为例:
1.下载版本
http://www.openvswitch.org/download/下载版本,上传至系统并解压:
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交换机组成如图(图片来源于网络):
ovs-dpctl:配置vswitch内核模块,可以控制转发规则。
ovs-ofctl:基于 OpenFlow 协议对 OpenFlow 交换机进行监控和管理,下发流表信息等。
ovs-appctl:用于查询和控制ovs-vswithchd。
ovs-vsctl:ovs-vSwitch管理程序,可以进行网桥、接口等的创建、删除、设置、查询等(即获取或更改ovs-vswitchd的配置信息),此工具操作的时候会通过ovsdb-server更新数据库。
ovsdb-client:访问 ovsdb-server 的客户端程序,通过 ovsdb-server 执行数据库操作。
vtep-ctl:VTEP(VXLAN隧道端点模拟器(VXLAN Tunnel EndPoint,VTEP))配置工具。
ovsdb-tool:ovsdb-tool 直接操作数据库,无需借助ovsdb-server。
datapath(OVS内核模块): Datapath把流的match和action结果缓存,避免后续同样的流继续upcall到用户空间进行流表匹配。
ovs-db:开放虚拟交换机数据库是一种轻量级的数据库,它是一个JSON文件,默认路径:/etc/openvswitch/conf.db;
可以通过命令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 删除网桥
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/6489.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏微信支付宝扫一扫,打赏作者吧~
休息一下~~
作者:hqy | 分类:Network | 浏览:288 | 评论:0
您的IP地址是: