行至水穷处 坐看“云”起时

☁️时代应用交付

docker容器跨宿主机通信方法(2):路由方式

路由方式互联跨宿主机容器:

linux在容器docker0网路与host的网卡网咯之间是可以执行ip forwarding的,因此跨主机的容器网络可以通过路由的方式来实现彼此互通,如下结构:

《docker容器跨宿主机通信方法(2):路由方式》

只需要在host1 添加到达172.27.0.0/16网络的路由,在host2上添加172.17.0.0/16的路由即可。

需要注意的前提:

各个host上的容器docker0网络不能相同,也就是说各个host里的容器的ip地址不能存在网络重叠情况,而缺省情况下,docker在建立docker0的时候都默认使用172.17.0.0/16网络,因此有必要对docker这一默认行为进行修改,实验环境版本下的修改方法如下:

修改缺省的 docker服务启动文件,在 execstart中增加 –bip参数来指定docker0网桥地址从而实现对应docker网络的修改。注意:修改此配置文件后,需要在ifconfig输出里没有docker0网桥或者docker0网桥的IP和你修改的配置文件里一致才可以正常启动服务。

修改完毕后,启动服务:

检查docker0设置:

host2增加路由;

host1增加路由:

 

测试:

host1上的容器里ping host2上的容器IP:

可以正常ping 通。测试成功。

手工配置的问题及Quagga自动化方案

但是在一个生产环境中,会有很多主机,手工维护这样一个静态路由的添加修改必然是一件很恐怖的事情,因此有了这样一个工具可以帮助自动完成这些工作:  http://www.quagga.net

需要在系统里运行这样一个软件路由器系统来实现彼此学习各个host里的docker0网络。为了简单化,可以将该软件容器化,然后以特权模式(–privileged)启动该容器,便可以自动彼此学习路由。网上灵雀云提供的那个容器image地址已经失效,可以手工从这里下载该镜像 https://pan.baidu.com/s/1sj26X8T

下载完毕后,将tar文件上传到所有host机器上,并执行命令:

tar文件将被load为image

在启动该容器前,检查一下当前路由表条目:

所有host上关闭系统防火墙 systemctl stop firewalld.service
所有host上启动quagga容器:

稍等片刻,再次检查路由表,发现系统路由表已增加一条到达172.27.0.0/16的路由

再次执行ping,可以成功ping通:

如果此时连接到quagga, telnet localhost 2601: (密码zebra)可以看到当前路由表,docker容器启用了ospf和rip两个动态路由协议

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注