基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
这是一篇之前写的笔记,主要记录了使用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
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进行构建)的更多相关文章
- Vagrant 构建 Linux 开发环境
Vagrant 是一个简单易用的部署工具,用英文说应该是 Orchestration Tool .它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境, Vagrant 基于 Ruby 开 ...
- Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅
通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来 Docker 化Dockerize一个 ...
- Docker部署SDN环境
2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...
- selenium结合docker构建分布式测试环境
selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...
- 在 Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境 (改)
开篇 Use Docker First And Learn About It Later 简介 Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署
之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- 构建基于Jenkins + Github的持续集成环境
搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...
随机推荐
- Ubuntu中文目录文件夹改为英文
打开终端,在终端中输入命令: export LANG=en_US xdg-user-dirs-gtk-update 在弹出的窗口中询问是否将目录转化为英文路径,同意并关闭. 在终端中输入命令: exp ...
- 批量删除Redis中的数据
测试环境上是docker安装的redis,生产上使用的是阿里云Redis服务,需要批量清理生产上的数据. 阿里云提供了BS结构的工具管理Redis,但是不能全选批量删除,只能脚本删除,方法是在测试环境 ...
- javascript:typeof与instanceof区别
from:http://www.wxwdesign.cn/article/skills/javascript_typeof_instanceof.htm JavaScript中typeof和insta ...
- lombok问题
今天研究了下以dubbo作为分布式的开源项目dubbo-app. 为了排除一些依赖的冲突和干扰,我另外开辟一个新的工作空间,同时我也将公司项目的依赖打个压缩包分类备份下. 这样一来,dubbo-app ...
- 【转】numpy-array自带的迭代器-----np.nditer
转自:https://www.jianshu.com/p/f2bd63766204 it = np.nditer(x, flags=['multi_index'], op_flags=['readwr ...
- P1474 货币系统 Money Systems
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
- 用kubeadm 搭建 高可用集群问题记录和复盘整个过程 - 通过journalctl -u kubelet.service命令来查看kubelet服务的日志
1.根据 https://github.com/cookeem/kubeadm-ha/blob/master/README_CN.md 去搭建ha集群,遇到几个问题: runtime networ ...
- NRF52832 能烧写代码 但是不运行 ,是因为没有烧写协议栈
仿真进入的状态 , MOVES R0.R0 请烧写 协议栈 ,自行百度!
- C#引用比较和内容比较
1.静态方法Object.ReferenceEqual,实际实现为引用比较. 2.静态方法Object.Equal, 实际实现为引用比较.(实际调用了实例方法Equal) 3.Object实例 ...
- block本质探寻八之循环引用
说明:阅读本文,请参照之前的block文章加以理解: 一.循环引用的本质 //代码——ARC环境 void test1() { Person *per = [[Person alloc] init]; ...