• Docker容器受控于SDN网络


          Docker自带三种网络类型的网络,分别为bridge网络,none网络,以及host网络,在启动容器时如果不指定容器所采用的网络类型,docker会默认将容器分配到bridge网络,并连接在docker0这张网卡上。如果想要使容器受控于SDN网络,则需在启动容器时指定其网络类型为none网络,然后通过ovs-docker工具将容器连接到对应的交换机上,最后再将交换机添加到floodlight控制器即可,下面将给出具体的操作:

          首先下载ovs-docker工具,方便后面用其将容器与ovs交换机相连

    sudo wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker

          下载好ovs-docker后修改权限,使其具有可运行权限,并创建两台虚拟交换机(openvswitch创建的交换机的实质是网桥),然后查看创建的交换机的状态

    sudo chmod a+x ovs-docker
    sudo ovs-vsctl add-br br1
    sudo ovs-vsctl add-br br2
    sudo ovs-vsctl show 

          创建容器并指定其网络类型为none网络

    sudo docker run -it --name host11 --network none --privileged chenjin2018/ubuntu:v1
    sudo docker run -it --name host12 --network none --privileged chenjin2018/ubuntu:v1
    sudo docker run -it --name host13 --network none --privileged chenjin2018/ubuntu:v1
    sudo docker run -it --name host21 --network none --privileged chenjin2018/ubuntu:v1
    sudo docker run -it --name host22 --network none --privileged chenjin2018/ubuntu:v1 

          容器创建成功后利用ovs-docker工具将所创建的容器添加到前面所创的ovs交换机上

    sudo ./ovs-docker add-port br1 eth0 host11 --ipaddress=10.0.0.11/24
    sudo ./ovs-docker add-port br1 eth0 host12 --ipaddress=10.0.0.12/24
    sudo ./ovs-docker add-port br1 eth0 host13 --ipaddress=10.0.0.13/24
    sudo ./ovs-docker add-port br2 eth0 host21 --ipaddress=10.0.0.21/24
    sudo ./ovs-docker add-port br2 eth0 host22 --ipaddress=10.0.0.22/24 

          为了验证容器是否添加成功,来查看一下当前ovs的状态,并附加到容器去查看容器的IP是否为我们自定义的IP,由下图可见容器已经成功分配自定义IP并成功连接到ovs交换机上 

          其中host11、host12、host13连接到br1上,host21、host22连接到br2上,连接到br1上的容器之间可以相互通信,连接到br2上的容器之间也可以相互通信,但br1与br2上的容器之间是不能相互通信的,下面来对这一结果进行验证 

          将两台ovs交换机连接到SDN控制器

    sudo ovs-vsctl set-controller br1 tcp:127.0.0.1:6653
    sudo ovs-vsctl set-controller br2 tcp:127.0.0.1:6653 

          由控制器的网络拓扑图可以看出,两台交换机和docker容器都已经成功添加到控制器上,但两台交换机之间并没有连通,如果想要不同交换机上的容器之间也可以相互通信,则需在两台交换机上创建虚拟端口,将其设为patch类似,并将对端端口添加上去

    在br1上创建虚拟端口,将其设置为patch类型,并添加对端端口
    sudo ovs-vsctl add-port br1 br1-2
    sudo ovs-vsctl set interface br1-2 type=patch
    sudo ovs-vsctl set interface br1-2 options:peer=br2-1
    在br2上创建虚拟端口,将其设置为patch类型,并添加对端端口
    sudo ovs-vsctl add-port br2 br2-1
    sudo ovs-vsctl set interface br2-1 type=patch
    sudo ovs-vsctl set interface br2-1 options:peer=br1-2

          查看当前两块网桥的信息 

          再次进入控制器页面查看两台交换机的连接情况 

          验证不同网桥上的容器的连通性 

          上述实验所用的Floodlight控制器还是我在参加SDN比赛时用的旧版本,其图形化界面的优化做的不是很好,最近出了新的控制器图形化界面做的很酷炫,但我并没有安装它,不过Docker这个强大的工具对应用进行封装,当然对SDN的控制器也有封装,docker.hub上有已经封装好的镜像,可以采用以下命令来获取镜像并启动容器

    sudo docker pull glefevre/floodlight
    sudo docker run -p 8080:8080 -p 6653:6653 glefevre/floodlight

          这里做了两个端口的映射,分别是8080和6653,这都是SDN控制器的端口,将容器化的SDN控制器端口映射到本地端口,然后在宿主机即可进去控制器页面

  • 相关阅读:
    移动端div移动
    js获取网页高度
    css cursor 的可选值(鼠标的各种样式)
    HTML5 拖动
    函数式编程中的常用技巧
    CoolShell Puzzle攻略[更新隐藏剧情]
    Web性能测试-词汇
    STM32库函数 断言机制 宏定义assert_param(expr)和assert_failed的使用方法
    arm汇编:伪指令ldr分析
    Altium designer 16 Mechanical1层之PCB 打样说明
  • 原文地址:https://www.cnblogs.com/chenjin2018/p/10034798.html
Copyright © 2020-2023  润新知