在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
概述 就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。 此时两台主机上的Docker容器如何直接通过IP地址进行通信? 一种直接想到的方案便是通过分别在各自主机中 添加路由 来实现两个centos容器之间的直接通信。 方案原理分析 由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案,如下图所示。 各项配置如下:
这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。 我们接下来 定义两条路由规则 即可:
综上所述,数据包在两个容器间的传递过程如下:
我们心里方案想的是这样,接下来实践一下看看是否可行。 实际试验 • 1. 分别对主机1和主机2上的docker0进行配置 编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask” { "bip":"192.168.100.252/24" } 编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask” { "bip":"192.168.200.252/24" } • 2. 重启docker服务 主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效 systemctl restart docker • 3. 添加路由规则 主机1上添加路由规则如下: route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.18.141 主机2上添加路由规则如下: route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.18.162 • 4. 配置iptables规则 主机1上添加如下规则: iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.0.0/16 -j MASQUERADE 主机2上添加如下规则: iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.0.0/16 -j MASQUERADE • 5. 启动容器 主机1上启动centos容器: docker run -it --name container1 centos /bin/bash 主机2上启动centos容器: docker run -it --name container2 centos /bin/bash • 分别在两台机器上安装ifconfig,并查看容器的ip,命令是: [root@695ba390d221 /]# yum search ifconfig [root@695ba390d221 /]# yum install net-tools.x86_64 主机1上的容器ip地址:
主机2上的容器ip: • 6. 容器间直接通信 好了,现在两容器可以互ping了 主机1上ping: 主机2上ping: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对极客世界的支持。如果你想了解更多相关内容请查看下面相关链接 |
请发表评论