经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
Docker容器跨主机通信中直接路由方式详解
来源:jb51  时间:2019/11/1 8:32:46  对本文有异议

概述

就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。

方案原理分析

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

环境介绍:

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

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

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

2、添加路由规则

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

3、配置iptables规则

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

4、启动容器

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

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

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

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

以上就是关于Docker容器跨主机通信的全部知识点内容,感谢大家的学习和对w3xue的支持。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号