千家信息网

Docker容器跨主机通信中直接路由方式的示例分析

发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,这篇文章给大家分享的是有关Docker容器跨主机通信中直接路由方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方案原理分析由于使用容器的IP进行路由,就需要避免
千家信息网最后更新 2024年12月04日Docker容器跨主机通信中直接路由方式的示例分析

这篇文章给大家分享的是有关Docker容器跨主机通信中直接路由方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

方案原理分析

由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案。

环境介绍:

主机1的IP地址为:192.168.145.128主机2的IP地址为:192.168.145.129为主机1上的Docker容器分配的子网:172.17.1.0/24为主机2上的Docker容器分配的子网:172.17.2.0/24这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。综上所述,数据包在两个容器间的传递过程如下:从container1 发往 container2 的数据包,首先发往container1的"网关"docker0,然后通过查找主机1的路由得知需要将数据包发给主机2,数据包到达主机2后再转发给主机2的docker0,最后由其将数据包转到container2中;反向原理相同,不再赘述。

1、分别对主机1和主机2上的docker0进行配置

编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask"{ "bip", "172.17.1.252/24" }编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask"{ "bip", "172.17.2.252/24" }重启docker服务主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效systemctl restart docker

2、添加路由规则

主机1上添加路由规则如下:route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.145.129主机2上添加路由规则如下:route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.145.128

3、配置iptables规则

主机1上添加如下规则:iptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE主机2上添加如下规则:iptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

4、启动容器

主机1上启动centos容器:docker run -it --name container1 centos /bin/bash主机2上启动centos容器:docker run -it --name container2 centos /bin/bash

好了,现在两容器可以互ping通。

5、路由持久化(防止主机重启路由丢失)

root@rancher:~# vi /etc/rc.local添加路由信息,切记写到exit之前!!!:route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.102.88

感谢各位的阅读!关于"Docker容器跨主机通信中直接路由方式的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0