设为首页 收藏本站
查看: 3788|回复: 0

[经验分享] OVS+KVM 虚拟环境测试

[复制链接]

尚未签到

发表于 2015-10-10 13:48:55 | 显示全部楼层 |阅读模式
一. 基础介绍:
DSC0000.jpg
  ovs当前最新代码包主要包括以下模块和特性:
      ovs-vswitchd主要模块,实现switch的 daemon,包括一个支持流交换的Linux内核模块;

    ovsdb-server轻量级数据库服务器,提供ovs-vswitchd获取配置信息;

    ovs-vsctl查询和更新 ovs-vswitchd的配置;

    ovs-brcompatd让 ovs-vswitch替换 Linuxbridge,包括获取 bridgeioctls 的 Linux内核模块;

    ovs-dpctl用来配置 switch内核模块;一些 Scriptsand specs 辅助 OVS安装在 CitrixXenServer 上,作为默认switch;
  ovs-appctl发送命令消息,运行相关daemon;

    ovsdbmonitorGUI 工具,可以远程获取OVS数据库和 OpenFlow的流表。
  此外,OVS也提供了支持 OpenFlow的特性实现,包括
  ovs-openflowd:一个简单的OpenFlow交换机;

  ovs-controller:一个简单的OpenFlow控制器;

  ovs-ofctl查询和控制 OpenFlow交换机和控制器;

  ovs-pki:OpenFlow 交换机创建和管理公钥框架;

  ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息;
二.openvswitch安装配置:
  1.准备工作:


apt-get  install build-essential
apt-get  install openssl
  OnLinux you should ensure that /dev/urandom exists. To support TAP devices,you must also ensure that /dev/net/tun exists:


         ls -l /dev/urandom
ls -l /dev/net/tun
  2.下载openvswitch源文件,安装openvswitch

注意版本要适合操作系统内核:

DSC0001.jpg
  Openvswitch包下载地址:http://openvswitch.org/download/

安装:

tar-xzf openvswitch-2.1.3.tar.gz
cd openvswitch-2.1.3/
./configure --with-linux=/lib/modules/`uname -r`/build
make && make install
insmod datapath/linux/openvswitch.ko
//加载openvswitch模块,第二次使用时cd  openvswitch-2.1.3,从此步骤开始启动OVS
  如果出现无法加载.ko,提示unknownsymbol in module,两种情况:一是openvswitch版本与系统内核版本不一致;二是首先加载gre模块:modprobe gre,再insmod加载即可。
补充一下DataPath的概念,OpenFlow就是控制和数据转发分离,而控制端,就叫做ControllerPath,比如 floodlight等;负责转发数据的数据转发端,就叫做DataPath,也就是支持 OpenFlow的硬件或者软件交换机 Switch核模块已成功装入:

$ lsmod | grep openvswitch
openvswitch            97934  0
  一旦你证实openvswitch.ko已成功装入到内核中,继续安装内核模块,如下所示。


$ sudo make modules_install
  3.初始化配置openvswitch
  创建ovsdb数据库:


sudo mkdir -p /usr/local/etc/openvswitchsudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
  配置启动ovsdb-server:


sudo ovsdb-server /usr/local/etc/openvswitch/conf.db --remote=punix:/usr/local/var/run/openvswitch/db.sock --pidfile --detach
  初始化数据库:


sudo ovs-vsctl --no-wait init
  启动 OpenvSwitch daemon,连接到同样的 Unixdomain socket 上:


sudo ovs-vswitchd --pidfile --detach
  查看进程:


ps -ef |grep ovs
  至此openvswitch安装配置结束。
三.KVM安装配置:
  (1)安装软件包:


sudo apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils
  其中:virt-manager为GUI管理窗口,bridge-utils:用于网络桥接。
  (2)安装测试:
执行下面的命令看KVM是否安装成功:


    kvm-ok
  输出信息:


INFO:/dev/kvm exists
 KVMacceleration can be used
如果提示信息为:
INFO:KVM (vmx) is disabled by your BIOS(KVM [vmx]被你的BIOS禁用)
HINT:Enter your BIOS setup and enable Virtualization Technology (VT)
则需要进入的BIOS设置界面,启用虚拟化技术[VT],设置步骤为:
进入BIOS后,选择ADVANCED,然后至PROCESSOR CONFIGURATION进去找到,
INTEL(R) VIRTUALIZATION  TECHNOLOGY ,设置成ENABLE,保存退出。
验证KVM内核是否加载成功:
lsmod| grep kvm
输出为:
kvm_intel    47162   0
kvm          317577  1  kvm_intel
若KVM内核没加载执行下面命令加载:   


$sudo modprobe kvm
$sudo modprobe kvm-intel ( or kvm-amd )
  (3)证实KVM正常运行:


  virsh-c qemu:///system list
  将输出:
Id Name State
如果提示你没权限操作,则需要将当前操作账户添加进libvirtd组,命令为:
sudo usermod -G libvirtd -a zlk
  (4)启动KVM GUI:


virt-manager
  在KVM中安装操作系统
  (5)KVM使用:

kvm –help

看某个命令(img)的信息:
kvm-img –help
  操作:


(virsh net-start default)
virsh list
virsh start host1
virsh shutdown host1
virsh destory host1

四.测试部分:
DSC0002.jpg
  1.启动OVS:


cd openvswitch-2.1.3
modprobe gre
insmod datapath/linux/openvswitch.ko
sudo ovsdb-server  /usr/local/etc/openvswitch/conf.db --remote=punix:/usr/local/var/run/openvswitch/db.sock --pidfile --detach
sudo ovs-vswitchd --pidfile --detach
ps -ef |grep ovs
  2.启动KVM虚拟机:


virsh net-start default
virsh start host1
virsh start host2
ifconfig
virt-manager
  注:

virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。

我们需要删掉:


virsh net-destroy default
  3.测试:
  (1)按照拓扑结构创建vswitch:


ovs-vsctl add-br br0   //创建桥br0
ovs-vsctl add-port br0 vnet0  //添加VM1虚拟端口vnet0
ovs-vsctl add-port br0 vnet1  //添加VM2虚拟端口vnet1
ovs-vsctl add-port br0 eth0  //添加物理端口eth0
  注:当把物理端口添加到虚拟交换机上之后,这些物理端口上原先的IP设置将失效(IP属于三层,而交换机工作在二层),无法与外界进行三层的互联。解决方法是设置internal的端口并添加路由:


sudo ifconfig br0 192.168.1.3 netmask 255.255.255.0
sudo route adddefault gw 192.168.1.1 br0
  把和br0直连的路由器或防火墙的IP地址设置为默认网关,所有未知网络都发往路由器、防火墙等网络设备的接口192.168.1.1,因为路由器、防火墙有多个网段的路由条目,匹配到条目后就转发数据包!

说明:VM1 ip:192.168.1.152
VM2 ip :192.168.1.247
物理端口eth0 ip:192.168.1.111
外部host ip:192.168.1.110

  (2)流规则测试:
OpenFlow是用于管理交换机流表的协议,ovs-ofctl则是OVS提供的命令行工具。在没有配置OpenFlow控制器的模式下,用户可以使用ovs-ofctl命令通过OpenFlow协议去连接OVS,创建、修改或删除OVS中的流表项,并对OVS的运行状况进行动态监控。OpenSwitch定义了一系列FlowTable,通过它来控制包的流向和结构。
  查看datapath的信息:
  

ovs-dpctl show

system@ovs-system:
lookups: hit:927782 missed:164964 lost:0
flows: 2
masks: hit:1453718 total:2 hit/pkt:1.33
port 0: ovs-system (internal)
port 1: br0 (internal)
port 2: vnet0
port 3: vnet1
port 4: eth0


  查看OpenvSwitch 中的端口信息。从输出结果中,可以获得交换机对应的datapath ID (dpid),以及每个端口的OpenFlow端口编号,端口名称,当前状态等等。


ovs-ofctl show br0
OFPT_FEATURES_REPLY (xid=0x2): dpid:00007824af39ff9a
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
1(vnet0): addr:fe:54:00:0f:88:00
config:     0
state:      0
current:    10MB-FD COPPER
speed: 10 Mbps now, 0 Mbps max
2(vnet1): addr:fe:54:00:b7:26:a9
config:     0
state:      0
current:    10MB-FD COPPER
speed: 10 Mbps now, 0 Mbps max
3(eth0): addr:78:24:af:39:ff:9a
config:     0
state:      0
current:    1GB-FD AUTO_NEG
advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG AUTO_PAUSE AUTO_PAUSE_ASYM
supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG
speed: 1000 Mbps now, 1000 Mbps max
LOCAL(br0): addr:78:24:af:39:ff:9a
config:     0
state:      0
speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0
  如果想获得网络接口的OpenFlow编号,也可以在OVS的数据库中查询


ovs-vsctl get Interface vnet0 ofport
4
  重定向数据包:

添加新的 OpenFlow条目,重定向所有的ICMP数据包到端口vnet1:


ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:2
  监听端口:


sudo tcpdump -n -i vnet1 icmp
  操作:host192.168.1.110  ping 192.168.1.152
在端口 vnet1上监控数据,发现数据包已被转发到端口vnet1
  修改目地ip和mac:


ovs-ofctl add-flow br0 actions=mod_nw_dst:192.168.1.3,mod_dl_dst:78:24:af:39:ff:9a,normal


  查看br0上所有的流规则:


ovs-ofctl dump-flows br0


  删除所有流规则


ovs-ofctl del-flows br0


  添加规则


ovs-ofctl add-flow br0 actions=normal


  注:
  flow有很多syntax, 一半来说actions之前都是match的部分,常用的一般是


in_port: switch的端口
dl_src:  源mac地址
dl_dst:  目的mac地址
nw_src:  源IP
nw_dst:   目的ip
dl_type:  以太网协议类型 0x0806是arp packet 0x0800是ip packet
nw_proto: 协议类型,注意和dl_type区分,同时也需要和dl_type一起使用,比如dl_type是ip(0x0800),那么nw_proto=1就表示icmp packet
tp_src: tcp udp源端口
tp_dst: tcp udp目的端口

ip     Same as dl_type=0x0800.
icmp    Same as dl_type=0x0800,nw_proto=1.
tcp    Same as dl_type=0x0800,nw_proto=6.
udp     Same as dl_type=0x0800,nw_proto=17.
arp    Same as dl_type=0x0806.
rarp    Same as dl_type=0x8035.
  actions:

output:port

controller(key=value) 送到controller作为packet-in 消息,括号内的key valuepair可以是:

reason=reason ,reason 可以是action,no_match,invalid_ttl

id=controller-id 默认是0,特殊的controller会有一个16位的id


mod_dl_src:mac
      Sets the source Ethernet address to mac.
mod_dl_dst:mac
      Sets the destination Ethernet address to mac.
mod_nw_src:ip
      Sets the IPv4 source address to ip.

mod_nw_dst:ip
      Sets the IPv4 destination address to ip.

mod_tp_src:port
     Sets the TCP or UDP source port to port.
mod_tp_dst:port
    Sets the TCP or UDP destination port to port.
  “`  

(3)Floodlight连接OpenvSwitch 并进行管理。
  一方面,OpenFlow控制器可以通过OpenFlow协议连接到任何支持OpenFlow的交换机,控制器通过和交换机交换流表规则来控制数据流向。另一方面,OpenFlow控制器向用户提供的界面或者接口,用户可以通过界面对网络架构进行动态的修改,修改交换机的流表规则等等。Floodlight是一个基于Apache协议,使用Java开发的企业级OpenFlow控制器。
  1.安装JDK,ant 。可以选择安装eclipse,但是它不是一定要用得到的。

   sudo apt-get install build-essential default-jdk ant python-deveclipse

  2.在另外一台机器上,下载Floodlight源码并编译    .


        $ git clone git://github.com/floodlight/floodlight.git
$ cd floodlight/
$ ant

  3.运行Floodlight:


       $ java -jar target/floodlight.jar
  4.Floodlight运行并将调试信息打到屏幕上:


    ps -ef | grep floodlight
  在安装了 OVS交换机的节点上,配置OVS交换机br0,使用Floodlight作为控制器。默认情况下,Floodlight在端口6633上进行监听,我们使用ovs-vsctl命令配置OVS交换机使用TCP协议连接到Floodlight(IP地址为192.168.1.225,端口号6633)。对于一个OVS交换机来说,可以同时配置一个或者多个控制器:


$ovs-vsctl set-controller br0 tcp:192.168.1.111:6633
  当 OVS交换机连接到 Floodlight控制器后,理论上所有的流表规则应该交给控制器来建立。由于OVS交换机和控制器之间是通过网络通讯来传递数据的,所以网络连接失败会影响到Flow的建立。针对这种情况,OVS提供了两种处理模式:
      standlone:默认模式。如果 OVS交换机超过三次无法正常连接到OpenFlow控制器,OVS交换机自己会负责建立流表。在这种模式下,OVS和常见的 L2交换机相似。与此同时,OVS也会继续尝试连接控制器,一旦网络连接恢复,OVS会再次切换到使用控制器进行流表管理。
      secure:在 secure模式下,如果 OVS无法正常连接到 OpenFlow控制器,OVS会不停的尝试与控制器重新建立连接,而不会自己负责建立流表。 设置 OVS的连接模式为secure模式:


$ ovs-vsctl set Bridge ovs-switch fail-mode=secure
   通过访问Floodlight提供的Web管理界http://192.168.1.111:8080/ui/index.html,我们可以查看Floodlight控制器的状态以及所有连接到Floodlight的交换机列表.

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125147-1-1.html 上篇帖子: KVM概述 下篇帖子: 虚拟化方案之--kvm简单教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表