经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
来源:cnblogs  作者:NinWoo  时间:2018/9/25 19:14:34  对本文有异议

这是一篇之前写的笔记,主要记录了使用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

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

Change Docker registry to Aliyun

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

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

Get Basic Docker Image

  1. docker pull alpine

Exercise 1

Create Three Container

  1. docker run -d -i --name RouterA --net=none --privileged alpine sh
  2. docker run -d -i --name RouterB --net=none --privileged alpine sh
  3. docker run -d -i --name RouterC --net=none --privileged alpine sh

Check Containers' Status

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

Create Virtual Network Bridge

  1. sudo ovs-vsctl add-br vnbr

Set Protocols

  1. ovs-vsctl set bridge br0 protocols=OpenFlow13

Check the brige is added

  1. [typh@localhost ~]$ sudo ovs-vsctl show
  2. d9d42750-7b9b-4688-adf9-d07f619e9bac
  3. Bridge vnbr
  4. Port vnbr
  5. Interface vnbr
  6. type: internal
  7. ovs_version: "2.5.0"

Add Network Port

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

Check The Status of vnbr

  1. [typh@localhost ~]$ sudo ovs-vsctl show
  2. d9d42750-7b9b-4688-adf9-d07f619e9bac
  3. Bridge vnbr
  4. Port vnbr
  5. Interface vnbr
  6. type: internal
  7. Port "facad1a218c64_l"
  8. Interface "facad1a218c64_l"
  9. Port "d48d429fe1894_l"
  10. Interface "d48d429fe1894_l"
  11. Port "12437ccb4eab4_l"
  12. Interface "12437ccb4eab4_l"
  13. ovs_version: "2.5.0"

Set OpenFlow Port ID

  1. sudo ovs-vsctl set interface facad1a218c64_l ofport_request=100
  2. sudo ovs-vsctl set interface d48d429fe1894_l ofport_request=200
  3. sudo ovs-vsctl set interface 12437ccb4eab4_l ofport_request=300

Connect to ODL Controller

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

Check the Connections with Controller

  1. d9d42750-7b9b-4688-adf9-d07f619e9bac
  2. Bridge vnbr
  3. Controller "tcp:127.0.0.1:6633"
  4. is_connected: true
  5. Port vnbr
  6. Interface vnbr
  7. type: internal
  8. Port "facad1a218c64_l"
  9. Interface "facad1a218c64_l"
  10. Port "d48d429fe1894_l"
  11. Interface "d48d429fe1894_l"
  12. Port "12437ccb4eab4_l"
  13. Interface "12437ccb4eab4_l"
  14. ovs_version: "2.5.0"

Test the connection between the two host By PING

  1. docker exec -it RouterA ping -c 4 10.0.1.2

Generally, they cannot connect with the other.

Add Flows

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

Get the Flows from vSwitch

  1. ovs-ofctl -O OpenFlow13 dump-flows vnbr

Test Again.

  1. docker exec -it RouterA ping -c 4 10.0.1.2

Example of the successful result.

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

Start karaf

  1. feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-all
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号