我们这一节主要来看Controller

Controller有两种:

  • Primary Controller: 真正控制vswitch的flow table,vswitch会保持和controller的连接,如果失败,取决于bridge的fail mode。一个vswitch可以连接多个Controller,但是这些Controller之间的协作需要Controller自己来做。
  • Service Controller:仅仅用于support,偶尔操作,maintain使用,如果connection断掉,bridge的fail mode不起作用。

使用floodlight作为controller

下面按照http://networkstatic.net/openflow-openvswitch-lab/

http://networkstatic.net/openflow-starter-tutorial-lab-1/

http://networkstatic.net/openflow-tutorial-lab-2/

http://networkstatic.net/openflow-tutorial-lab-3/

测试controller

创建一个image, qemu-img create -f qcow2 ./images/ubuntu-14.04.img 5G

按照ubuntu

sudo virt-install --virt-type kvm --name ubuntu-14.04 --ram 2048 --noreboot --disk path=/home/cliu8/images/ubuntu-14.04.img,format=qcow2,bus=virtio,device=disk --cdrom=/home/cliu8/images/ubuntu-14.04-server-amd64.iso --network network=default --graphics vnc,listen=0.0.0.0 –noautoconsole

$ ps aux | grep 0.0.0.0 
libvirt+ 16500  0.5  0.4 4095256 319416 ?      Sl   Jun16   0:14 qemu-system-x86_64 -enable-kvm –name ubuntu-14.04 -S -machine pc-i440fx-trusty,accel=kvm,usb=off -m 2048 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 0f0806ab-531d-6134-5def-c5b495529285 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/Instance01.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/home/cliu8/images/ubuntu-14.04.img,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=29,id=hostnet0,vhost=on,vhostfd=32 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:9b:d5:bc,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:7 -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

用VNC Client连接到机器,安装好ubuntu

$ sudo virsh dumpxml ubuntu-14.04 
<domain type='kvm'> 
  <name>ubuntu-14.04</name> 
  <uuid>0f0806ab-531d-6134-5def-c5b495529284</uuid> 
  <memory unit='KiB'>2097152</memory> 
  <currentMemory unit='KiB'>2097152</currentMemory> 
  <vcpu placement='static'>1</vcpu> 
  <os> 
    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type> 
    <boot dev='hd'/> 
  </os> 
  <features> 
    <acpi/> 
    <apic/> 
    <pae/> 
  </features> 
  <clock offset='utc'/> 
  <on_poweroff>destroy</on_poweroff> 
  <on_reboot>restart</on_reboot> 
  <on_crash>restart</on_crash> 
  <devices> 
    <emulator>/usr/bin/kvm-spice</emulator> 
    <disk type='file' device='disk'> 
      <driver name='qemu' type='qcow2'/> 
      <source file='/home/cliu8/images/ubuntu-14.04.img'/> 
      <target dev='vda' bus='virtio'/> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> 
    </disk> 
    <disk type='block' device='cdrom'> 
      <driver name='qemu' type='raw'/> 
      <target dev='hdc' bus='ide'/> 
      <readonly/> 
      <address type='drive' controller='0' bus='1' target='0' unit='0'/> 
    </disk> 
    <controller type='usb' index='0'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> 
    </controller> 
    <controller type='pci' index='0' model='pci-root'/> 
    <controller type='ide' index='0'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> 
    </controller> 
    <interface type='network'> 
      <mac address='52:54:00:9b:d5:bb'/> 
      <source network='default'/> 
      <model type='rtl8139'/> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 
    </interface> 
    <serial type='pty'> 
      <target port='0'/> 
    </serial> 
    <console type='pty'> 
      <target type='serial' port='0'/> 
    </console> 
    <input type='mouse' bus='ps2'/> 
    <input type='keyboard' bus='ps2'/> 
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'> 
      <listen type='address' address='0.0.0.0'/> 
    </graphics> 
    <video> 
      <model type='cirrus' vram='9216' heads='1'/> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> 
    </video> 
    <memballoon model='virtio'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> 
    </memballoon> 
  </devices> 
</domain>

我们并不在这台机器上直接操作,因为我们要保存一个原生的ubuntu

创建三个instance:

qemu-img create -f qcow2 -o backing_file=./ubuntu-14.04.img ./instance01.img

$ cat images/instance01.xml 
<domain type='kvm'> 
  <name>Instance01</name> 
  <uuid>0f0806ab-531d-6134-5def-c5b495529285</uuid> 
  <memory unit='KiB'>2097152</memory> 
  <currentMemory unit='KiB'>2097152</currentMemory> 
  <vcpu placement='static'>1</vcpu> 
  <os> 
    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type> 
    <boot dev='hd'/> 
  </os> 
  <features> 
    <acpi/> 
    <apic/> 
    <pae/> 
  </features> 
  <clock offset='utc'/> 
  <on_poweroff>destroy</on_poweroff> 
  <on_reboot>restart</on_reboot> 
  <on_crash>restart</on_crash> 
  <devices> 
    <emulator>/usr/bin/kvm-spice</emulator> 
    <disk type='file' device='disk'> 
      <driver name='qemu' type='qcow2'/> 
      <source file='/home/cliu8/images/instance01.img'/> 
      <target dev='vda' bus='virtio'/> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> 
    </disk> 
    <controller type='usb' index='0'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> 
    </controller> 
    <controller type='pci' index='0' model='pci-root'/> 
    <controller type='ide' index='0'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> 
    </controller> 
    <interface type='bridge'> 
      <mac address='52:54:00:9b:d5:bc'/> 
      <source bridge='helloworld'/> 
      <virtualport type='openvswitch' /> 
      <model type='virtio'/> 
    </interface>
 
    <serial type='pty'> 
      <target port='0'/> 
    </serial> 
    <console type='pty'> 
      <target type='serial' port='0'/> 
    </console> 
    <input type='mouse' bus='ps2'/> 
    <input type='keyboard' bus='ps2'/> 
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'> 
      <listen type='address' address='0.0.0.0'/> 
    </graphics> 
    <video> 
      <model type='cirrus' vram='9216' heads='1'/> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> 
    </video> 
    <memballoon model='virtio'> 
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> 
    </memballoon> 
  </devices> 
</domain>

创建一个bridge:

sudo ovs-vsctl add-br helloworld

在另外一台机器上16.158.165.102安装floodlight

apt-get install git

git clone git://github.com/floodlight/floodlight.git

如果有proxy

apt-get install socat

$ cat /usr/bin/gitproxy 
#!/bin/bash

PROXY=web-proxy.corp.hp.com 
PROXYPORT=8080 
#PROXYAUTH=username:password 
exec socat STDIO PROXY:$PROXY:$1:$2,proxyport=$PROXYPORT

chmod +x /usr/bin/gitproxy

git config --global core.gitproxy gitproxy

然后再git clone git://github.com/floodlight/floodlight.git

cd floodlight/

apt-get install ant

apt-get install openjdk-7-jdk

nohup java -jar target/floodlight.jar > floodlight.log 2>&1 &

将bridge连接到controller

sudo ovs-vsctl set-controller helloworld tcp:16.158.165.102:6633

$ sudo ovs-vsctl show 
c24322e6-8453-402a-afaf-64757ef231e9 
    Bridge helloworld 
        Controller "tcp:16.158.165.102:6633" 
            is_connected: true 
        Port "vnet8" 
            Interface "vnet8" 
        Port "vnet10" 
            Interface "vnet10" 
        Port helloworld 
            Interface helloworld 
                type: internal 
        Port "vnet9" 
            Interface "vnet9" 
    ovs_version: "2.0.1"

登陆http://16.158.165.102:8080/ui/index.html

当前的拓扑结构如下:

下面我们只允许10.10.10.1和10.10.10.3相互ping

$ curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow1", "cookie":"0", "priority":"32768", "src-mac":"52:54:00:9b:d5:bc","active":"true", "actions":"output=3"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json 
{"status" : "Entry pushed"}

$ curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow2", "cookie":"0", "priority":"32768", "src-mac":"52:54:00:9b:d5:be","active":"true", "actions":"output=1"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json 
{"status" : "Entry pushed"}

我们来验证效果

$ sudo ovs-ofctl dump-flows helloworld 
NXST_FLOW reply (xid=0x4): 
cookie=0xa00000d7014f7f, duration=873.78s, table=0, n_packets=57, n_bytes=10922, idle_age=170, hard_age=778, dl_src=52:54:00:9b:d5:bc actions=output:3 
cookie=0xa00000d7014f80, duration=855.454s, table=0, n_packets=78, n_bytes=19004, idle_age=29, dl_src=52:54:00:9b:d5:be actions=output:1

从10.10.10.1 ping其他机器

从10.10.10.2 ping其他机器

从10.10.10.3 ping其他机器

我们进行下一个实验

将flow table clear掉

curl http://16.158.165.102:8080/wm/staticflowentrypusher/clear/00:00:a2:96:ff:dd:56:45/json

然后我们讲正确的mac导向正确的port

curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow1", "cookie":"0", "priority":"32768", "dst-mac":"52:54:00:9b:d5:bc","active":"true", "actions":"output=1"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json

curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow2", "cookie":"0", "priority":"32768", "dst-mac":"52:54:00:9b:d5:bd","active":"true", "actions":"output=2"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json

curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow3", "cookie":"0", "priority":"32768", "dst-mac":"52:54:00:9b:d5:be","active":"true", "actions":"output=3"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json

这个时候互相的ping的通的

下面我们将导向port3的导向port2,并同时tcpdump在10.10.10.2和10.10.10.3两台机器上。

在机器10.10.10.1上ping 10.10.10.3

一开始10.10.10.3能收到并且恢复

后来我们改变了规则

curl -d '{"switch": "00:00:a2:96:ff:dd:56:45", "name":"static-flow3", "cookie":"0", "priority":"32768", "dst-mac":"52:54:00:9b:d5:be","active":"true", "actions":"output=2"}' http://16.158.165.102:8080/wm/staticflowentrypusher/json

10.10.10.2开始能够收到ping,但是无法恢复

转载于:https://www.cnblogs.com/liuhongru/p/11133740.html

Openvswitch手册(2): OpenFlow Controller相关推荐

  1. Openvswitch手册(4): Mirror

    Openvswitch手册(4): Mirror 这一节我们来分析Mirror Mirror就是配置一个bridge,将某些包发给指定的mirrored ports 对于包的选择: select_al ...

  2. mininet报错解决:Exception: Could not find a default OpenFlow controller和Cannot find required executable

    早上在使用mininet的时候报错如下: Traceback (most recent call last):File "simple.py", line 63, in myTes ...

  3. Openvswitch手册(5): VLAN and Bonding

    我们这一节来看Port 一般来说一个Port就是一个Interface,当然也有一个Port对应多个Interface的情况,成为Bond VLAN Configuration Port的一个重要的方 ...

  4. 牛商网携手九州云,构建新型互联网业务平台

    随着互联网.移动互联网时代的持续演进, 互联网营销已深入到人们的衣食住行,人们对互联网营销的依赖程度也越来越高,互联网营销正在改变我们的生活,并在改变世界. 在此背景下,2008 年3月深圳市牛商网络 ...

  5. OpenStack网络模块核心OpenvSwitch的全面解读

    一.OpenStack网络 1.1 什么是SDN软件定义网络 软件定义网络(Software Defined Network)就是在虚拟化的背景下,为了满足虚拟化环境下虚拟机对网络的需求,逐步发展起来 ...

  6. OpenvSwitch架构

    Openvswitch的架构 数据库结构和OVS-VSCTL # ps aux | grep openvswitch root      1117  0.0  0.0  21200  1580 ?   ...

  7. SDN和Openflow flowvisor NOX

    目录(?)[-] 简介 编辑本段传统路由器的设计 设计思想 虚拟化的逆袭网络虚拟化之OpenFlow和SDN Open还是Flow OpenFlow对产业链的影响 OpenFlow面临的技术难点 结论 ...

  8. openvswitch 2.3.1 配置详解

    <?xml version="1.0" encoding="utf-8"?> <database title="Open vSwit ...

  9. SDN and OpenFlow扫盲

    第一部分: OpenFlow 白皮书解读, 来源: 白皮书: http://archive.openflow.org/documents/openflow-wp-latest.pdf spec:  h ...

  10. OpenFlow入门资料汇总(OpenFlow、SDN、NOX等,多为网络文章)

    声明:此篇文章为转载,转载原文地址为:http://blog.csdn.net/jincm13/article/details/7825754 很好的OpenFlow方向的网络文章汇总,阅读通篇能够对 ...

最新文章

  1. 电脑服务器高配置和高性能,为高性能工作站服务 超算系统配置推荐
  2. python零基础怎么学-零基础怎么学习python?
  3. 编写高性能 .NET 代码 第二章:垃圾回收
  4. 如何根据对象获取到对应的表名_Excel VBA 常用对象二
  5. 调整idea中控制台及右侧提示框字体大小
  6. 一本通网站 1378:最短路径(shopth)
  7. 1个平方大概多少立杆_普通水泥地面一平方大概要用多少地板漆
  8. 利用Proteus 8.9运行stm32最简单的跑马灯程序
  9. 鸡汤:【转载】超级高效术,让你的人生效率快人10倍
  10. 2021年山东省安全员C证考试内容及山东省安全员C证模拟试题
  11. 安装杀毒软件后计算机运行速度慢,ThinkPad运行速度慢怎么办
  12. nowcoder 鹏
  13. uc浏览器黑莓java下载安装_(黑莓软件)黑莓最新版UC浏览器下载安装!8.1最新版UC浏览器!...
  14. Poi导入excel(合并单元格)
  15. python计算分位数方法
  16. C++ windows下判断鼠标点击及获取像素点
  17. 立创EDA助力2021全国电赛数百万奖学金!
  18. 正版服务器,MC原版服务器搭建教程
  19. 【报告分享】快消行业巨量引擎营销攻略-群邑GroupM巨量引擎(附下载)
  20. 南宁python培训价格

热门文章

  1. BAT程序员手把手带你学算法-数组篇(理论知识剖析+5道经典面试题目)
  2. Mac 计算器隐藏功能,满足你所有计算要求
  3. 堪比ps:Affinity Photo for mac(专业修图软件)
  4. 忽略“Signal: SIGSEGV (Segmentation fault)”
  5. 惊!这些居然不是零食而是药,你知道吗?
  6. Linux命令(2):ls命令
  7. linux新手入门学习 - linux目录结构
  8. 【python】编程语言入门经典100例--11
  9. Linux程序包管理和yum用法
  10. 第五讲 python函数