这是一篇之前写的笔记,主要记录了使用openvswitch + Docker 等进行一个小型的SDN网络搭建的操作步骤。由于
之前临时有其他任务,耽搁了一下,最近开始重新整理,并计划开发一个简单的Python脚本,简化该网络的创建过程。
同时希望该脚本可以和控制器的程序进行融合,方便未来可以和docker更容易的结合在一起。项目地址:DockerSDN。

以下内容或许存在问题,如果在实现过程中发现问题,可与我联系,谢谢、

Date: 2018.7.9
Auther: joliu ljo0412@live.com

  • OpenFlow

    • basic knowlege
  • OVS command
    • how to add flow table to open vSwitch
    • how to bind dockers to vSwitch

Install ovs and mininet

learn details about this

Install Docker

Use DaoCloud accelerator

curl -sSL https://get.daocloud.io/docker | sh

Change Docker registry to Aliyun

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

请替换https://xxxxxxx.mirror.aliyuncs.com,详细配置内容参见我的另外一篇随笔CentOS7使用阿里源安装最新版Docker

Get Basic Docker Image

docker pull alpine

Exercise 1

Create Three Container

docker run -d -i --name RouterA --net=none --privileged alpine sh
docker run -d -i --name RouterB --net=none --privileged alpine sh
docker run -d -i --name RouterC --net=none --privileged alpine sh

Check Containers' Status

[typh@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
37b9ca888f03        alpine              "sh"                About a minute ago   Up About a minute                       RouterC
f1604beb380f        alpine              "sh"                About a minute ago   Up About a minute                       RouterB
3b3c52c5a582        alpine              "sh"                3 minutes ago        Up 3 minutes 

Create Virtual Network Bridge

sudo ovs-vsctl add-br vnbr

Set Protocols

ovs-vsctl set bridge br0 protocols=OpenFlow13

Check the brige is added

[typh@localhost ~]$ sudo ovs-vsctl show
d9d42750-7b9b-4688-adf9-d07f619e9bacBridge vnbrPort vnbrInterface vnbrtype: internalovs_version: "2.5.0"

Add Network Port

sudo ovs-docker add-port vnbr eth0 RouterA --ipaddress="10.0.1.1/24"
sudo ovs-docker add-port vnbr eth0 RouterB --ipaddress="10.0.1.2/24"
sudo ovs-docker add-port vnbr eth0 RouterC --ipaddress="10.0.3.1"

Check The Status of vnbr

[typh@localhost ~]$ sudo ovs-vsctl show
d9d42750-7b9b-4688-adf9-d07f619e9bacBridge vnbrPort vnbrInterface vnbrtype: internalPort "facad1a218c64_l"Interface "facad1a218c64_l"Port "d48d429fe1894_l"Interface "d48d429fe1894_l"Port "12437ccb4eab4_l"Interface "12437ccb4eab4_l"ovs_version: "2.5.0"

Set OpenFlow Port ID

sudo ovs-vsctl set interface facad1a218c64_l ofport_request=100
sudo ovs-vsctl set interface d48d429fe1894_l ofport_request=200
sudo ovs-vsctl set interface 12437ccb4eab4_l ofport_request=300

Connect to ODL Controller

sudo ovs-vsctl set-controller vnbr tcp:127.0.0.1:6633

Check the Connections with Controller

d9d42750-7b9b-4688-adf9-d07f619e9bacBridge vnbrController "tcp:127.0.0.1:6633"is_connected: truePort vnbrInterface vnbrtype: internalPort "facad1a218c64_l"Interface "facad1a218c64_l"Port "d48d429fe1894_l"Interface "d48d429fe1894_l"Port "12437ccb4eab4_l"Interface "12437ccb4eab4_l"ovs_version: "2.5.0"

Test the connection between the two host By PING

docker exec -it RouterA ping -c 4 10.0.1.2

Generally, they cannot connect with the other.

Add Flows

sudo ovs-ofctl add-flow vnbr "priority=1 idle_timeout=0,in_port=1,actions=output:2"
sudo ovs-ofctl add-flow vnbr "priority=2 idle_timeout=0,in_port=1,actions=output:1"

Get the Flows from vSwitch

ovs-ofctl -O OpenFlow13 dump-flows vnbr

Test Again.

docker exec -it RouterA ping -c 4 10.0.1.2

Example of the successful result.

[master@MiWiFi-R3-srv ~]$ sudo docker exec -it RouterA ping -c 4 10.0.1.2
PING 10.0.1.2 (10.0.1.2): 56 data bytes
64 bytes from 10.0.1.2: seq=0 ttl=64 time=0.062 ms
64 bytes from 10.0.1.2: seq=1 ttl=64 time=0.061 ms
64 bytes from 10.0.1.2: seq=2 ttl=64 time=0.086 ms
64 bytes from 10.0.1.2: seq=3 ttl=64 time=0.078 ms--- 10.0.1.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.061/0.071/0.086 ms

Start karaf

feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-all

转载于:https://www.cnblogs.com/NinWoo/p/9649007.html

基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)相关推荐

  1. Docker+Ovs构建SDN网络

    一.背景知识 关于Docker的基础知识和实验用到的Docker ryu镜像可以参考:Docker命令.基于Docker的SDN实验环境部署(1)_北风-CSDN博客 Docker网络模式: 本实验, ...

  2. docker 构建Android编译环境

    docker 构建Android编译环境 文章目录 docker 构建Android编译环境 @[toc] ubuntu:14.04镜像 FAQs ubuntu:18.04镜像 FAQs 由于电脑升级 ...

  3. Vagrant 构建 Linux 开发环境

    Vagrant 是一个简单易用的部署工具,用英文说应该是 Orchestration Tool .它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境, Vagrant 基于 Ruby 开 ...

  4. 一零零九、Docker搭建 全集群 环境配置

    目录 纯Docker部分 Docker结合Hadoop部分 环境搭建篇 Docker入门传送门 基于传统的hadoop搭建方式,将hadoop搭建前的虚拟物理机准备部分使用docker容器替代,后续 ...

  5. 使用 Docker 搭建 Laravel 本地环境

    (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,Homestead 是一个官方预封装的 ...

  6. Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅

    2019独角兽企业重金招聘Python工程师标准>>> 通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念,以及如何通过创建一 ...

  7. docker搭建java测试环境_基于docker构建测试环境

    目录 0x01介绍 0x02 镜像基本操作 0x03 容器基本操作 0x04 容器的修改与保存 0x05 使用Dockerfile定制镜像 0x01介绍 Docker 是一个开源的应用容器引擎,基于 ...

  8. Docker部署SDN环境

    2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...

  9. Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

    Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目 前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+ ...

最新文章

  1. c++之openGL在VS中的配置及简单图形绘制
  2. .NET中获取电脑名,IP地址,当前用户
  3. 活动直播丨“2021智源论坛”邀您见证智源三年成绩与展望
  4. 关于html的a标签的target=__blank 的安全漏洞问题
  5. kdj买卖指标公式源码_翔博精选指标KDJ买卖点提示(通达信公式 副图 测试图)...
  6. Codeforces Round #246 (Div. 2)
  7. EF架构~LinqToEntity里实现left join的一对一与一对多
  8. Everyday is an Opportunity
  9. 盘点Greenplum 6.0六大新特性及展望
  10. Spring(4)--- hello world实例
  11. java画圈_java动态画圈圈。运用多线程,绘图
  12. linux启动写入了mbr,一、Linux系统启动(MBR)
  13. 控制面板中java设置项如何删除
  14. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析...
  15. 杜比音效卡刷包android 7.0,杜比音效7.0清爽卡刷包-杜比音效7.0定制版v2.1.0 安卓版-手机腾牛网...
  16. arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
  17. java 幸运大转盘_幸运大转盘抽奖 抽奖算法 程序实现逻辑
  18. 使用mysql语句进行多表联查(以三个表为例)
  19. 如何获取(GET)一杯咖啡——星巴克REST案例分析
  20. HTML网页设计制作——初音动漫(6页) dreamweaver作业静态HTML网页设计模板

热门文章

  1. python flask高级编程之restful_flask-restful使用总结
  2. 推荐 | Transformer最新成果!Learn to Dance with AIST++: Music Conditioned 3D Dance Generation!
  3. CVPR 2020 | 北大Futurewei提出 GraphTER:无监督图变换共变表征学习
  4. SOTIF预期功能安全分析方法
  5. 专业工程师看过来~ | RDD、DataFrame和DataSet的细致区别
  6. Dockerfile 常用命令
  7. java后端简历项目经历_为了面试字节跳动后端开发岗(Java)鬼知道我经历了什么.....
  8. 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
  9. 信安精品课:第1章网络信息安全概述精讲笔记
  10. Macbook pro笔记本键盘失灵了(u,i,o,j,k,l,k,m无效了)解决办法