这是一篇之前写的笔记,主要记录了使用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-d07f619e9bac
Bridge vnbr
Port vnbr
Interface vnbr
type: internal
ovs_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-d07f619e9bac
Bridge vnbr
Port vnbr
Interface vnbr
type: internal
Port "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-d07f619e9bac
Bridge vnbr
Controller "tcp:127.0.0.1:6633"
is_connected: true
Port vnbr
Interface vnbr
type: internal
Port "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

基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)的更多相关文章

  1. Vagrant 构建 Linux 开发环境

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

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

    通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来 Docker 化Dockerize一个 ...

  3. Docker部署SDN环境

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

  4. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

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

    前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...

  6. 在 Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境 (改)

    开篇 Use Docker First And Learn About It Later 简介 Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署

    之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...

  8. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  9. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

随机推荐

  1. 1、JVM-走进java

    1.1.概述 Java不仅仅是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统.移动终端.企业服务器.大 ...

  2. [luogu1080] 国王游戏

    题面 ​ 这是一个比较经典(害人不浅)的题目啊, 很早就听说过这个题目的大名, 今日得见, 果然非凡题所可以比拟的啊, 行了, 瞎扯就先扯到这里, 题目大意应该是很好解释的, 我就不解释了, 要使得最 ...

  3. linq to sql 中增删改查

    首先我先说一下,如果真的要用linq做项目的话,也会是比较方便的.已经尝试了在三层架构中应用linq to sql 比较方便. //有三个不同的数据库表,所以写法不一样 public class Li ...

  4. Sequelize-nodejs-2-basic usage

    Basic usage基本使用 To get the ball rollin' you first have to create an instance of Sequelize. Use it th ...

  5. 集合之Stack

    在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...

  6. java的静态方法多态和匿名对象

    静态方法: 看如下代码 父类: public class FU { public static void show(){ System.out.println("this is fu!&qu ...

  7. C语言程序设计I—第七周教学

    第七周教学总结(14/10-20/10) 教学内容 第二章 用C语言编写程序 2.5 生成乘方表和阶乘表 课前准备 在蓝墨云班课发布资源: PTA:2018秋第七周作业 分享码:FE065DC5D8C ...

  8. linux文件系统初始化过程(5)---加载initrd(下)

    一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir() ...

  9. L2-022 重排链表(链表)

    题目: 给定一个单链表 L​1​​→L​2​​→⋯→L​n−1​​→L​n​​,请编写程序将链表重新排列为 L​n​​→L​1​​→L​n−1​​→L​2​​→⋯.例如:给定L为1→2→3→4→5→6 ...

  10. 存储类、链接和内存管理(c prime plus)

    首先介绍三个概念: (1)作用域:作用域描述了程序中可以访问一个标识符的一个或多个区域. 一共有三种作用域:代码块作用域.函数原型作用域和文件作用域 a.代码块作用域:一个代码块是包含在开始花括号和对 ...