拓扑图如下:
host1:10.20.10.70
host2:10.20.10.71
分别在主机1和主机2上创建一个ovs交换机:
ovs-vsctl add-br ovs0 ip link set ovs0 up
分别为ovs0添加一个port(br0在同一网段):
ovs-vsctl add-port ovs0 br0
在主机1创建通往host2的gre隧道:
ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=10.20.10.71
在主机2创建通往host1的gre隧道:
ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=10.20.10.70
在主机1上启动一个容器(使用pipework把容器挂在br0上,分配的ip地址为192.168.2.10):
./ldocker.sh
在主机2上启动一个容器(使用pipework把容器挂在br0上,分配的ip地址为192.168.2.11):
./ldocker.sh
进入主机1上的容器,ping主机2上的容器:
可以ping通。。。
配置成功
host1上的ldocker.sh代码如下(反复试验的原因,打到手软了,所以用个简单脚本):
#!/bin/sh docker run -itd --name=test1 hochikong/erbuntu:v1 pipework br0 test1 192.168.2.10/24
关于如何进入容器操作ping,请参见本人另一博文:http://my.oschina.net/hochikong/blog/369036
总结:这样的方案可以让同一网段的容器跨机器进行通讯,实现了应用的灵活部署。另外,我的拓扑和这个架构(http://www.sdnlab.com/8236.html)实现的功能是一样的,大家也可以参考下,不过我是bridge和OVS混用的,还可以在ovs0上实现VLAN,目前还没发现有什么大问题。
另外我尝试为ovs0配置ip,两个ovs0配置同一网段的ip(比如10.0.0.1和10.0.0.2),网络也可以通讯,去掉也没问题。
接下来我要尝试在两个host上创建多个这样的网络,测试结果迟些出吧。
时间: 2024-10-12 05:53:44