Docker容器受控于SDN网络

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

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

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

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

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

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

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交换机上 tcp

      其中host十一、host十二、host13链接到br1上,host2一、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相似,并将对端端口添加上去spa

在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

      查看当前两块网桥的信息 3d

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

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

 

      上述实验所用的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控制器端口映射到本地端口,而后在宿主机便可进去控制器页面

相关文章
相关标签/搜索