Open vSwitch(OVS虚拟交换机)

news2024/11/26 4:29:20

Open vSwitch(OVS)

Open vSwitch(OVS)是一个开源的多层虚拟交换机,用于构建和管理软件定义网络(Software-Defined Networking,SDN)环境。它提供了一种灵活、可扩展的网络虚拟化解决方案,适用于数据中心、云计算和网络虚拟化等场景。

以下是 Open vSwitch 的一些特点和功能:

  1. 轻量级虚拟交换机:Open vSwitch 可以作为软件交换机运行在通用服务器上,实现虚拟网络的创建和管理。它支持虚拟机、容器和物理主机之间的通信,提供高性能的数据转发。

  2. 多层交换:Open vSwitch 支持二层以太网交换和三层 IP 路由功能。它可以在不同的网络层之间进行数据包转发和路由,支持 VLAN、VXLAN、GRE 等多种隧道协议。

  3. 高可用性和负载均衡:Open vSwitch 支持多主机间的交换机冗余和负载均衡,确保网络的高可用性和性能。

  4. SDN 兼容性:Open vSwitch 可以与 SDN 控制器集成,实现网络的集中管理和控制。它支持 OpenFlow 协议,使得网络管理员可以通过控制器对网络流量进行灵活的编程和管理。

  5. QoS(Quality of Service)支持:Open vSwitch 提供了 QoS 功能,可以对网络流量进行优先级和带宽控制,以确保关键应用的服务质量。

  6. 插件架构:Open vSwitch 提供了插件架构,允许用户通过插件来扩展和定制网络功能,满足特定的需求。

  7. 开源社区支持:Open vSwitch 是一个活跃的开源项目,拥有广泛的社区支持和开发者社区,持续推进其功能和性能的改进。

总体而言,Open vSwitch 提供了一种灵活、可扩展的虚拟交换机解决方案,适用于构建虚拟化环境和软件定义网络,提供了高级网络功能和集中管理的能力。

img

ovs交换机的角色

在SDN的架构下,ovs作为 SDN交换机,向上连接控制器,向下连接主机。并且Open vSwitch交换机是能够与真是物理交换机通信,相互交流数据。

img

ovs交换机的组成

img

  • **ovs-vswitchd:**ovs守护进程,实现基于流的交换,实现内核datapath upcall 处理以及ofproto 查表,同时是dpdk datapath处理程序。与ovsdb-server通信使用OVSDB协议,与内核模块使用netlink机制通信,与controller通信使用OpenFlow协议。

  • **ovsdb-server:**OVS轻量级的数据库服务器的服务程序,用于保存整个OVS的配置信息。数据库服务程序, 使用目前普遍认可的ovsdb 协议。

  • **ovs-vsctl:**网桥、接口等的创建、删除、设置、查询等。

  • **ovs-dpctl:**配置vswitch内核模块

  • **ovs-appctl:**发送命令消息到ovs-vswithchd, 查看不同模块状态

  • **ovs-ofctl:**下发流表信息。该命令可以配置其他openflow 交换机(采用openflow 协议)

  • datapath: Datapath把流的match和action结果缓存,避免后续同样的流继续upcall到用户空间进行流表匹配。

  • **ovs-db:**开放虚拟交换机数据库是一种轻量级的数据库,它是一个JSON文件,默认路径:/etc/openvswitch/conf.db;

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

    每一个ovs交换机中,数据库中存在的表如下:

img

数据包处理流程

1.ovs的datapath接收到从ovs连接的某个网络设备发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。

2.ovs在内核状态下查看流表结构(通过Hash),观察是否有缓存的信息可用于转发这个数据包。

3.假设数据包是这个网络设备发来的第一个数据包,在OVS内核中,将不会有相应的流表缓存信息存在,那么内核将不会知道如何处置这个数据包。所以内核将发送upcall给用户态。

4.ovs-vswitchd进程接收到upcall后,将检查数据库以查询数据包的目的端口是哪里,然后告诉内核应该将数据包转发到哪个端口,例如eth0。

5.内核执行用户此前设置的动作。即内核将数据包转发给端口eth0,进而数据被发送出去。

安装指定版本的ovs

准备工作

安装python

apt install python

安装python-pip

apt install python-pip 

安装步骤:

  1. 到官网http://www.openvswitch.org/download/下载指定版本,可以看到这种安装的好处是你可以指定任何一种版本,不会被apt的安装方式限制了版本号。

    wget https://www.openvswitch.org/releases/openvswitch-2.17.6.tar.gz
    
  2. 解压

     tar -zxvf openvswitch-2.17.6.tar.gz
    
  3. 生成makefile文件

    ./configure
    
  4. make 编译文件

    make
    
  5. make install 安装

    make install
    
  6. 检查模块

    make modules_install 
    
  7. 载入模块,载入openvswitch的模块到内核中

    /sbin/modprobe openvswitch 
    /sbin/lsmod |grep openvswitch
    
  8. 启动

    export PATH=$PATH:/usr/local/share/openvswitch/scripts
    ovs-ctl start 
    
  9. 启动ovsdb-server服务

    export PATH=$PATH:/usr/local/share/openvswitch/scripts
    ovs-ctl --no-ovs-vswitchd start
    
  10. 启动ovs-vswitchd服务

    export PATH=$PATH:/usr/local/share/openvswitch/scripts
    ovs-ctl --no--ovsdb-server start
    
  11. 配置ovsdb的数据库

    mkdir -p /usr/local/etc/openvswitch
    ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
        vswitchd/vswitch.ovsschema
    
  12. 配置ovsdb-server以使用上面创建的数据库,监听Unix域套接字

    mkdir -p /usr/local/var/run/openvswitch
    ovsdb-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
    
  13. 使用ovs-vsctl初始化数据库

    启动主Open vSwitch守护进程

    ovs-vsctl --no-wait init
    ovs-vswitchd --pidfile --detach --log-file
    
  14. 接下来就可以使用了,使用ovs-vsctl show命令,查看ovs的版本号。

    root@node1:~# ovs-vsctl show
    60760ff9-ed7f-463c-abc5-447309fea552
        ovs_version: "2.17.6"
    

一次性执行完成的多行命令:

./configure
make 
make install
make modules_install 
/sbin/modprobe openvswitch 

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

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

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

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

mkdir -p /usr/local/var/run/openvswitch
ovsdb-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

ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach --log-file

ovs中的port

在Open vSwitch(OVS)中,“port"是指物理或逻辑网络设备的接口,用于连接虚拟交换机与外部网络或其他虚拟机。每个端口都有一个唯一的标识符,称为"port ID”。

在OVS中,有几种类型的端口:

  1. 物理端口(Physical Port):物理端口是连接OVS交换机和物理网络设备(如物理网卡)的接口。它们用于与外部网络进行通信,例如连接服务器到物理交换机或路由器的网口。

  2. 虚拟端口(Virtual Port):虚拟端口是连接OVS交换机和虚拟机的接口。它们用于将虚拟机连接到OVS交换机,以便进行虚拟机之间的通信或与外部网络的通信。

  3. 隧道端口(Tunnel Port):隧道端口是用于建立虚拟网络之间的隧道连接的接口。它们通过在底层网络上封装和解封装数据包,实现虚拟网络之间的通信。

  4. 内部端口(Internal Port):内部端口是用于连接OVS交换机内部组件的接口,如连接交换机的流表、控制器或其他模块的接口。

端口在OVS中起到了关键的作用,它们允许虚拟机、物理设备和其他网络组件之间的通信和互联。OVS可以配置和管理这些端口,以实现网络的灵活性、可扩展性和性能优化。

Open vSwitch使用

使用 Open vSwitch(OVS)可以实现网络虚拟化和软件定义网络(SDN),下面是 Open vSwitch 的一些基本使用方式和步骤:

  1. 安装 Open vSwitch:根据您的操作系统,使用适当的软件包管理工具(如apt、yum等)安装 Open vSwitch。

  2. 创建网桥:使用 ovs-vsctl 命令创建一个网桥,例如:

    sudo ovs-vsctl add-br ovsbr0
    
  3. 添加物理接口:将物理网络接口(例如eth0)添加到网桥中,例如:

    sudo ovs-vsctl add-port ovsbr0 eth0
    
  4. 配置虚拟接口:使用 ovs-vsctl 命令创建和配置虚拟接口,例如:

    sudo ovs-vsctl add-port ovsbr0 veth0 -- set Interface veth0 type=internal
    
  5. 配置流量转发:根据需要,使用 ovs-ofctl 命令配置流量转发规则,例如:

    sudo ovs-ofctl add-flow ovsbr0 in_port=eth0,actions=output:veth0
    

    上述命令表示从 eth0 接口接收的数据包将被转发到 veth0 接口。

  6. 配置虚拟网络:可以创建虚拟网络和子网,并将虚拟接口和虚拟机连接到这些网络中,以实现虚拟化环境的网络隔离和管理。

  7. 集成 SDN 控制器:如果需要使用 SDN 控制器管理网络,可以将 Open vSwitch 配置为与控制器集成,例如使用 OpenFlow 协议。

这只是 Open vSwitch 的基本用法示例,实际使用会根据具体的网络需求和环境而有所不同。您可以参考 Open vSwitch 的官方文档和相关资料,了解更多详细的使用方法和配置选项。

将物理网卡加入网桥ip失效问题解决

ovs-vsctl add-port my-br ens18

将物理网卡加入网桥后ssh连接失效,不能ssh,不能ping通。

解决步骤:

查看当前网卡ip地址

ifconfig

查看路由

route -n

创建网桥,绑定端口

ovs-vsctl add-br my-br
ovs-vsctl show
ovs-vsctl add-port my-br ens18

将网卡ens18的ip地址转移到网卡my-br上

ifconfig ens18 0  //不用漏了
ifconfig my-br xxx.xxx.xxx.xxx
ifconfig my-br up

查看路由

发现当前路由中没有发往外网的路由

route -n

添加新路由

ip route add/replace 0.0.0.0/0 via 172.17.0.1 dev my-br

测试生效

ping baidu.com

使用ovs-docker配置docker网络

ovs-docker: Performs integration of Open vSwitch with Docker.
usage: ovs-docker COMMAND

Commands:
  add-port BRIDGE INTERFACE CONTAINER [--ipaddress="ADDRESS"]
                    [--gateway=GATEWAY] [--macaddress="MACADDRESS"]
                    [--mtu=MTU]
                    Adds INTERFACE inside CONTAINER and connects it as a port
                    in Open vSwitch BRIDGE. Optionally, sets ADDRESS on
                    INTERFACE. ADDRESS can include a '/' to represent network
                    prefix length. Optionally, sets a GATEWAY, MACADDRESS
                    and MTU.  e.g.:
                    ovs-docker add-port br-int eth1 c474a0e2830e
                    --ipaddress=192.168.1.2/24 --gateway=192.168.1.1
                    --macaddress="a2:c3:0d:49:7f:f8" --mtu=1450
  del-port BRIDGE INTERFACE CONTAINER
                    Deletes INTERFACE inside CONTAINER and removes its
                    connection to Open vSwitch BRIDGE. e.g.:
                    ovs-docker del-port br-int eth1 c474a0e2830e
  del-ports BRIDGE CONTAINER
                    Removes all Open vSwitch interfaces from CONTAINER. e.g.:
                    ovs-docker del-ports br-int c474a0e2830e
  set-vlan BRIDGE INTERFACE CONTAINER VLAN
                    Configures the INTERFACE of CONTAINER attached to BRIDGE
                    to become an access port of VLAN. e.g.:
                    ovs-docker set-vlan br-int eth1 c474a0e2830e 5
Options:
  -h, --help        display this help message.

添加interface:

 ovs-docker add-port vmbr6001 eth0 centos4 --ipaddress=172.17.3.104/22 --gateway=172.17.0.1

获取与ovs数据库中与docker绑定的所有interface:

ovs-vsctl --data=bare --no-heading --columns=name find interface external_ids:container_id=centos3

设置vlan:

ovs-docker set-vlan vmbr6001 eth1-ovs centos3 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单硬盘笔记本系统无损迁移(Ghost)方法

有一台笔记本启动使用UEFI方式,由于硬盘(SSD)发热问题想更换另一块SSD硬盘,但是由于笔记本就一个m.2接口,没有办法直接进行两块硬盘的系统迁移。 解决办法: 1、将老硬盘的系统通过Ghost软件克隆成一个gho文件&#x…

【MybBatis高级篇】MyBatis 拦截器

【MybBatis高级篇】MyBatis 拦截器 拦截器介绍实现拦截器注册拦截器应用ymlDynamicSqlDao 层代码xml启动类拦截器核心代码代码测试 拦截器应用场景 MyBatis 是一个流行的 Java 持久层框架,它提供了灵活的 SQL 映射和执行功能。有时候我们可能需要在运行时动态地修改…

如何解决 Scratch 中很难去除的bug?

大家好,今天我们就来讲讲我们在使用Scratch编程中遇到的一些典型的bug,相信也有你遇到的,我这里讲的名称稍微专业了一点,但是也希望你都能看完整篇文章,说不定就有你遇到的,给作者一个关注和赞吧&#xff0…

Vue如何做一个左边栏

要求一-------点击之后能够实现页面跳转,使用router,点击之后跳到指定页面: 第二步:如何实现简易的前端路由 第三步 左侧边栏的正确写法,ul中li套router-link 第四步 实现嵌套路由 第五步 ul中嵌套着li 第六步嵌套路由 第七步&…

elementUI 实现动态表单数据校验

转载http://t.csdn.cn/XuTa2 1、探讨需求 首先我们需要探讨一下需求: 表单中的部分el-form-item 的label都是从接口拿到的,需要遍历进行动态渲染。 需要给每个el-form-item加上校验至少是必填校验 有的el-form-item不需要校验,也不是从接口…

express学习笔记1 - 框架搭建

1、创建项目 mkdir admin-node cd admin-node npm init -y 安装依赖 npm i -S express 创建 app.js const express require(express)// 创建 express 应用 const app express()// 监听 / 路径的 get 请求 app.get(/, function(req, res) {res.send(hello node) })// 使 …

GoogleLeNet Inception V2 V3

文章目录 卷积核分解第一步分解,对称分解第二步分解,非对称分解在Inception中的改造一般模型的参数节省量可能导致的问题 针对两个辅助分类起的改造特征图尺寸缩减Model Regularization via Label Smoothing——LSR问题描述,也就是LSR解决什么…

问道管理:市盈率市净率市销率三者之间的关系?

市盈率、市净率和市销率是股票剖析中最常用的三种金融目标,它们是评价股票价值和价格是否合理的重要工具。那么,三者之间到底有什么联系呢?本文将从多个视点进行剖析。 1. 基本概念 市盈率 (PE Ratio) 是一个衡量公司的股价相对于其每股收益…

安卓音视频多对多级联转发渲染

最近利用自己以前学习和用到的音视频知识和工程技能做了一个android的sdk,实现了本地流媒体ipc rtsp 拉流以及自带mip usb等camera audio节点产生的流媒体通过webrtc sfu的方式进行多对多级联发布共享,网状结构,p2p组网,支持实时渲染以及转推rtmp&#x…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

 工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据…

【Android】APP启动优化学习笔记

启动优化目的 用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动…

Inobitec DICOM Viewer Pro 2.11.0 Crack

Inobitec DICOM Viewer Pro 2.11.0 专业DICOM查看器、匿名器、转换器、PACS客户端、迷你PACS服务器、患者CD/DVD刻录机(带查看器)等功能的医学影像专业必备的DICOM工作站和查看器 动态渐进版本(每季度发布)扩展功能 高级 3D 重建 以 OBJ、STL、PLY、…

uni-app:实现分页功能,单击行获取此行指定数据,更改行样式

效果&#xff1a; 分段解析代码 分页功能实现&#xff1a; 一、标签 1、搜索栏-模糊查询 <!-- 搜索框--><form action"" submit"search_wip_name"><view class"search_position"><view class"search"><…

【AGC】Publishing API调用问题汇总

【问题背景】 开发者可以通过Publishing API完成几乎所有应用的管理和发布工作&#xff0c;自己制定自动发布接口。Publishing API有很多接口&#xff0c;包括了查询应用信息、更新应用信息、上传文件、提交发布等主要接口。下面总结了一些开发者在使用Publishing API过程中容…

构建高效物理计划:从逻辑查询到算子实现

​一、前言 本文主要介绍内容一条查询语句如何实现由逻辑计划生成物理计划。查询语句要执行的操作、涉及的表信息等存放于逻辑计划的 PlanNode 中&#xff0c;物理计划的构建就是通过解析逻辑计划的 PlanNode&#xff0c;将对应的 PlanNode 转换为对应算子&#xff08;Process…

springboot整合tio-websocket方案实现简易聊天

写在最前&#xff1a; 常用的http协议是无状态的&#xff0c;且不能主动响应到客户端。最初想实现状态动态跟踪只能用轮询或者其他效率低下的方式&#xff0c;所以引入了websocket协议&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务…

富士通“Actlyzer”提供基于AI的基于视频的行为分析

想象一下这样的场景&#xff1a;一个男人走近一个家的前门&#xff0c;蹲下并检查钥匙孔。这是丢失房屋钥匙的居民还是客人&#xff1f;还是寻找入口点的窃贼&#xff1f;“Actlyzer”是一种新的人工智能安全系统&#xff0c;旨在区分这种情况。富士通实验室和研发中心的行为分…

经典文献阅读之--Online Extrinsic Calibration(激光雷达,视觉和惯导外参在线标定)

0. 简介 为了实现精确定位&#xff0c;自动驾驶车辆通常依靠围绕移动平台的多传感器感知系统。校准是一个耗时的过程&#xff0c;机械畸变会导致外部校准误差。因此&#xff0c;《Lidar-Visual-Inertial Odometry with Online Extrinsic Calibration》提出了一种激光雷达-视觉…

安卓手机怎样录屏?手机录屏小技巧分享

如果你需要在安卓手机上录制一段视频或者教程&#xff0c;录屏功能是一个非常有用的工具。在这篇文章中&#xff0c;我们将会介绍安卓手机如何录屏&#xff0c;并分享一些小技巧。 在安卓手机上录屏的方法有很多种&#xff0c;这里我们介绍两种比较常用的方法。 方法一&#x…

Nodejs 爬虫 第二章(通过掘金 userId 抓取到所有文章)!HTML to Markdown

前言 就在昨天晚上&#xff0c;做了一个通过掘金文章链接进行解析html转化为markdown文档&#xff0c;并且把图片进行下载和替换&#xff0c;但是最后也留了个伏笔&#xff08;我一定会回来的&#xff5e;&#xff09;就是通过用户id&#xff0c;把所有的文章都转化出来&#x…