基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
这是一篇之前写的笔记,主要记录了使用openvswitch + Docker 等进行一个小型的SDN网络搭建的操作步骤。由于
之前临时有其他任务,耽搁了一下,最近开始重新整理,并计划开发一个简单的Python脚本,简化该网络的创建过程。
同时希望该脚本可以和控制器的程序进行融合,方便未来可以和docker更容易的结合在一起。项目地址:DockerSDN。
以下内容或许存在问题,如果在实现过程中发现问题,可与我联系,谢谢、
Date: 2018.7.9
Auther: joliu ljo0412@live.com
- OpenFlow basic knowlege
-
how to add flow table to open 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
- 在ubuntu 12.04中使用openvswitch+kvm 构建虚拟环境(真正的主机系统,可以运行多种测试应用)
- 使用openvidu 进行WebAPP开发环境部署(使用docker部署)
- 使用docker selenium 构建web自动化分布式测试环境时,遇到的一些问题
- 使用 Docker 构建开发、测试环境
- 基于kvm+ovs+ryu构建一个SDN环境
- OVS初级教程:使用open vswitch构建虚拟网络(转载)
- docker实战1 (docker-toolbox的安装,docker基础命令详解[运行,容器导入/导出,镜像导入/导出,数据卷,网络],构建100个docker实例的测试环境)
- 构建基于 Docker + Jenkins + Sahi 的 Web UI 自动化测试环境
- 单域环境下如何使用VLAN构建网络
- 使用Robotium & UIAutomator构建基于twitter的测试
- 搭建mocha测试环境并使用selenium进行测试
- 使用iperf进行网络测试
- 关于二级指针的使用测试小例子,仅供测试--参数传递的时候用指针最好,因为压栈的时候指针,只是压入一个地址的值,最多4个字节(32位机上),提供的3个测试例子,基于VC6.0的环境。
- 基于nginx的PHP本地测试环境构建软件pinyshop发布
- MAC环境使用Http模拟工具进行网络请求
- 使用open vswitch构建虚拟网络
- 搭建mocha测试环境并使用selenium进行测试
- CENTOS6.3下使用Iptraf进行基于端口的网络流量的分析
- 基于在生产环境中使用php性能测试工具xhprof的详解
- 基于在生产环境中使用php性能测试工具xhprof的详解(转)