Open vSwitch 安装及配置 一、 Open vSwitch 简介 1.1 概述 Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache 2.0许可协议。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。
Open vSwitch 支持多种 linux 虚拟化技术,包括 Xen/XenServer, KVM,和 VirtualBox。 1.2 模块介绍 当前最新代码包主要包括以下模块和特性: ovs-vswitchd 主要模块,实现 switch 的 daemon,包括一个支持流交换的 Linux 内核模块; ovsdb-server 轻量级数据库服务器,提供 ovs-vswitchd 获取配置信息; ovs-brcompatd 让 ovs-vswitch 替换 Linux bridge,包括获取 bridge ioctls 的 Linux 内核模块; ovs-dpctl 用来配置 switch 内核模块; 一些 Scripts and specs 辅助 OVS 安装在 Citrix XenServer 上,作为默认 switch; ovs-vsctl 查询和更新 ovs-vswitchd 的配置; ovs-appctl 发送命令消息,运行相关 daemon; ovsdbmonitor GUI 工具,可以远程获取 OVS 数据库和 OpenFlow 的流表。 此外,OVS 也提供了支持 OpenFlow 的特性实现,包括 ovs-openflowd:一个简单的 OpenFlow 交换机; ovs-controller:一个简单的 OpenFlow 控制器; ovs-ofctl 查询和控制 OpenFlow 交换机和控制器; ovs-pki :OpenFlow 交换机创建和管理公钥框架; ovs-tcpundump:tcpdump 的补丁,解析 OpenFlow 的消息; 1.3 运行原理 内核模块实现了多个“数据路径”(类似于网桥),每个都可以有多个“vports”(类似于桥内的 N.J.C.H 端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都 是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另 一个 vport。当一个数据包到达一个 vport,内核模块所做的处理是提取其流的关键信息并在 流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将 数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以 后碰到相同类型的数据包可以在内核中执行操作)。 二、准备工作 2.1 说明 在 Open vSwitch 分布中编译 userspace 程序,需要下面软件 - A make program, e.g. GNU make. BSD make should also work. - The GNU C compiler. We generally test with version 4.1, 4.2, or 4.3. - pkg-config. We test with version 0.22. - libssl, from OpenSSL, is optional but recommended if you plan to connect the Open vSwitch to an OpenFlow controller. libssl is required to establish confidentiality and authenticity in the connections from an Open vSwitch to an OpenFlow controller. If libssl is installed, then Open vSwitch will automatically build with support for it. 在 linux 编译内核模块,还需要安装下面的软件。如果你不能建造或安装内核模块,你可以 使用 userspace-only 实现。 The Open vSwitch datapath requires bridging support (CONFIG_BRIDGE) to be built as a kernel module. (This is common in kernels provided by Linux distributions.) The bridge module must not be loaded or in use. If the bridge module is running (check with "lsmod | grep bridge"), you must remove it ("rmmod bridge") before starting the datapath. 2.2 操作 安装 Open vSwitch 之前确保安装了下面的软件 - libc compatible with the libc used for build. - libssl compatible with the libssl used for build, if OpenSSL was used for the build. - On Linux, the same kernel version configured as part of the build. - For optional support of ingress policing on Linux, the "tc" program from iproute2 (part of all major distributions and available at http://www.linux-foundation.org/en/Net:Iproute2). 执行 apt-get install build-essential apt-get install openssl On Linux you should ensure that /dev/urandom exists. To support TAP devices, you must also ensure that /dev/net/tun exists. 三、安装 Open vSwitch 3.1 下载 Openvswitch包下载地址:http://openvswitch.org/download/ root@ubuntu229:~# wget http://openvswitch.org/releases/openvswitch-1.9.0.tar.gz 3.2 解压 root@ubuntu229:~# tar -xzf openvswitch-1.9.0.tar.gz 3.3 安装 生成内核模式的 Open vSwitch 时需指定的内核源码编译目录,基本步骤如下 cd openvswitch-1.9.0/ ./configure --with-linux=/lib/modules/ùname -r`/build make && make install insmod datapath/linux/openvswitch.ko 补充一下 DataPath 的概念,OpenFlow 就是控制和数据转发分离,而控制端,就叫做 Controller Path,比如 floodlight 等;负责转发数据的数据转发端,就叫做 DataPath,也 就是支持 OpenFlow 的硬件或者软件交换机 Switch。 四、配置 Open vSwitch 建立 OpenVSwitch 配置文件和数据库 root@ubuntu229:~# mkdir -p /usr/local/etc/openvswitch root@ubuntu229:~# ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema 启动配置数据库 root@bogon:~# ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --private-key=db:SSL,private_key --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,ca_cert --pidfile --detach 如 果 你 built Open vSwitch 没 有 加 SSL 支 持 , 省 略 --private-key, --certificate, and --bootstrap-ca-cert 查启动情况 初始化数据库 root@ubuntu229:~# ovs-vsctl --no-wait init //仅需在第一次创建数据库时运行,但是每次都运行也没问题 启动 Open vSwitch daemon,连接到同样的 Unix domain socket 上 root@ubuntu229:~# ovs-vswitchd --pidfile --detach 成功后,会有三个进程,一 ovs_个 workeq 进程,一个 ovs-vswitchd 进程,一个 ovsdb-server 进程
|