通过OVS实现docker容器互联

最近在自己的虚拟机上安装了docker,感觉docker真的是一个灰常强大的东东啊!

由于之前也在学习sdn,一直以来都是用Mininet来进行模拟。而有了docker以后,可以使用容器来模拟Mininet中的host来与openvswitch进行互联,就可以做一些更加高级的实验啦! 在github上也有一个对原先mininet的扩展项目containernet容器网络,这个项目提供的api可以让我们在mininet中使用容器具体可以参考https://github.com/containernet/containernet进行学习。

下面来做一下这次的实验。

首先要确保安装了openvswitch和docker,其次需要运行docker容器,就需要docker image

先看看目前有的镜像,这两个其实都是ubuntu,第二个ubuntu是直接从docker hub上Pull下来的,而第一个image只是在第二个image上安装了vim 和 gcc,所以这次用哪个镜像都不影响使用。


首先启动一个ovs 命名为s1,随后通过ovs-vsctl show 命令查看一下这个网桥,目前没有分配IP和端口


接下来在两个shell中启动2个容器


使用的命令是

docker run -it --net=none --privileged=true --name=xxx yeya24/ubuntu:14.04

-it就相当于是运行容器后进入容器的命令行  如果不加这个选项的话容器默认是运行在后台

--net=none 则是指定容器运行在自己的命名空间,但是并不对容器进行网络配置,比如网卡,IP地址等 关于这个选项的说明可以参考https://blog.csdn.net/liuliuzi_hz/article/details/50504176这篇文章

--privileged=true 当我们进入容器的时候,默认是root用户,然而这个root用户还是没有很多权限,其实也就相当于宿主机的普通用户,加上privileged=true这个选项可以让容器内的用户权限提升

--name=xxx没啥好说的 给容器起个名字 我这边取得是host1 和 host2

容器创建好之后,通过docker ps 可以查看运行的容器 


由于我们刚才指定了net=none 所以此时在容器内使用ifconfig命令只能看到一个lo0接口



open vswitch中可以很方便的使用ovs-docker命令来进行与容器的互联


看一下这个命令的一些选项

add-port命令可以将ovs端口与容器互联 还可以指定ip地址,mac地址,网关,mtu等等

del-port 与上一条命令相对应 删除容器内的一个接口并中断这个接口与ovs的连通性

del-ports 删除ovs与容器所有的互联接口

set-vlan 可以对容器的接口设置vlan

在ovs上设置s1分别与host1,host2的eth0口相连


这个时候用ovs-vsctl show 来查看一下s1,可以看到多了2个端口


这时候我们看一下容器内的接口,发现此时多了一个eth0,但是还没有ip地址


我们给容器的eth0接口配置Ip

host1:

ifconfig eth0  172.16.0.1/24

host2:

ifconfig eth0  172.16.0.2/24
这个时候两个容器的eth0接口都配置完毕

h1 ping h2 发现直接就能通了


查看s1,发现自动生成了一条流表项,actions=normal,代表数据包正常转发(类似传统2层交换机的转发功能)


手动添加一条流表使host1和host2无法通行,这条流表对1端口号收到的数据报执行丢弃动作

sudo ovs-ofctl add-flow s1 "in_port=1,actions=drop"

可以发现这个时候已经Ping不通了


在s1上再把这条流表删除

sudo ovs-ofctl del-flows s1 "in_port=1"

发现2个容器之间又可以通信啦



  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值