Linux-虚拟网络设备-OpenvSwitch(持续更新)

本文深入探讨了OpenvSwitch(OVS),一个强大的虚拟交换软件,支持多种虚拟化技术。介绍了OVS的重要概念,如Bridge、Port和Flowtable,详细讲解了其安装配置、工作原理,特别是OpenFlow协议的应用,包括流表管理和实验示例。此外,还讨论了不同类型的Port及其在KVM环境中的应用。
摘要由CSDN通过智能技术生成

概述


这里写图片描述

     OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。 在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。

     OVS 遵循 Apache 2.0 许可证, 能同时支持多种标准的管理接口和协议。OVS 也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 进行远程管理控制。

     在这种某一台机器的虚拟化的环境中,一个虚拟交换机(vswitch)主要有两个作用:传递虚拟机VM之间的流量,以及实现VM和外界网络的通信。

The bulk of the code is written in platform-independent C and is easily ported to other environments. The current release of Open vSwitch supports the following features:
• Standard 802.1Q VLAN model with trunk and access ports
• NIC bonding with or without LACP on upstream switch
• NetFlow, sFlow(R), and mirroring for increased visibility
• QoS (Quality of Service) configuration, plus policing
• Geneve, GRE, VXLAN, STT, and LISP tunneling
• 802.1ag connectivity fault management
• OpenFlow 1.0 plus numerous extensions
• Transactional configuration database with C and Python bindings
• High-performance forwarding using a Linux kernel module

几个重要的概念

Bridge

Bridge代表一个以太网交换机(switch),一个主机中可以创建一个或多个bridge设备。

Port

端口与物理交换机的端口概念类似,每个port都隶属于一个bridge。

Interface

连接到port的网络接口设备。通常情况下,port和interface是一对一的关系,只有在配置port为bond模式后,port和interface才是一对多的关系。

Controller

OpenFlow控制器。OVS可以同时接受一个或多个OpenFlow控制器管理。

Datapath

在ovs中,datapath负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。

Flowtable

每个datapath都和一个“flowtable”关联,当datapath接收到数据之后,ovs会在flow table中查找可以匹配到的flow,执行对应的操作,例如转发数据到另外的端口。

安装与配置

下载代码

git clone https://github.com/openvswitch/ovs.git

编译代码

./boot.sh
./configure

By default all files are installed under /usr/local. Open vSwitch also expects to find its database in /usr/local/etc/openvswitch by default. If you want to install all files into, e.g., /usr and /var instead of /usr/local and /usr/local/var and expect to use /etc/openvswitch as the default database directory, add options as shown here:

./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc

make && make install

load the kernel modules

/sbin/modprobe openvswitch

校验安装

/sbin/lsmod | grep openvswitch

启动

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


这里写图片描述

校验

ovs-vsctl add-br ovs-bridge-test

工作原理

组件介绍


这里写图片描述

The main components of this distribution are:
• ovs-vswitchd, a daemon that implements the switch, along with a companion Linux kernel module for flow-based switching.
• ovsdb-server, a lightweight database server that ovs-vswitchd queries to obtain its configuration.
• ovs-dpctl, a tool for configuring the switch kernel module.
• Scripts and specs for building RPMs for Citrix XenServer and Red Hat Enterprise Linux. The XenServer RPMs allow Open vSwitch to be installed on a Citrix XenServer host as a drop-in replacement for its switch, with additional functionality.
• ovs-vsctl, a utility for querying and updating the configuration of ovs-vswitchd.
• ovs-appctl, a utility that sends commands to running Open vSwitch daemons.
Open vSwitch also provides some tools:
• ovs-ofctl, a utility for querying and controlling OpenFlow switches and controllers.
ovs-pki, a utility for creating and managing the public-key infrastructure

这里写图片描述

openflow

      OpenFlow 是用于管理交换机流表的协议,ovs-ofctl 则是 OVS 提供的命令行工具。在没有配置 OpenFlow 控制器的模式下,用户可以使用 ovs-ofctl 命令通过 OpenFlow 协议去连接 OVS,创建、修改或删除 OVS 中的流表项,并对 OVS 的运行状况进行动态监控。
OpenFlow 的匹配流程,如下图所示(来源于网络)


这里写图片描述

flow语法

     flow被定义为某个特定的网络流量。例如:一个tcp连接就是一个flow,或者从某个ip地址发出来的数据包,都可以认为是一个flow。支持openflow协议的交换机应该包含一个或多个流表,流表中的条目包含:数据包头的信息、匹配成功之后要执行的指令和统计信息。
     当数据包进入ovs后,会将数据包和流表中的流表项进行匹配,如果发现了匹配的流表项,则执行该流表项中的指令集。相反,如果数据包在流表中没有发现任何匹配,ovs会通过控制通道把数据包发送到openflow控制器中。

参数

     在ovs中,流表项作为ovs-ofctl的参数,采用如下的格式:字段=值。如果有多个字段,可以用逗号或者空格分开。一些常用的字段列举如下:


这里写图片描述

动作

对于 add−flow,add−flows 和 mod−flows 这三个命令,还需要指定要执行的动作:actions=[target][,target…]
一个流规则中可能有多个动作,按照指定的先后顺序执行。
常见的操作有:


这里写图片描述

实验


这里写图片描述

初始化设备信息

#创建一个新的 OVS 交换机
ovs-vsctl add-br ovs-switch
#添加端口,并设置端口号(如果不指定,ovs会自动生成一个)
#对于 internal 类型的的网络接口,OVS 会同时在 Linux 系统中创建一个可以用来收发数据的模拟网络设备。
#我们可以为这个网络设备配置 IP 地址、进行数据监听等等。
ovs-vsctl add-port ovs-switch p0 -- set Interface p0 type=internal ofport_request=100
ovs-vsctl add-port ovs-switch p1 -- set Interface p1 type=internal ofport_request=101
ovs-vsctl add-port ovs-switch p2 -- se
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值