小知识:Docker容器间通讯直接路由方式实现网络通讯

概述

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

%小知识:Docker容器间通讯直接路由方式实现网络通讯-猿站网-插图

此时两台主机上的docker容器如何直接通过ip地址进行通信?

一种直接想到的方案便是通过分别在各自主机中 添加路由 来实现两个centos容器之间的直接通信。

方案原理分析

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

%小知识:Docker容器间通讯直接路由方式实现网络通讯-1猿站网-插图

各项配置如下:

• 主机1的ip地址为:192.168.18.162

• 主机2的ip地址为:192.168.18.141

• 为主机1上的docker容器分配的子网:192.168.100.0/24

• 为主机2上的docker容器分配的子网:192.168.200.0/24

这样配置之后,两个主机上的docker容器就肯定不会使用相同的ip地址从而避免了ip冲突。

我们接下来 定义两条路由规则 即可:

• 所有目的地址为192.168.100.0/24的包都被转发到主机1上

• 所有目的地址为192.168.200.0/24的包都被转发到主机2上

综上所述,数据包在两个容器间的传递过程如下:

• 从container1 发往 container2 的数据包,首先发往container1的“网关”docker0,然后通过查找主机1的路由得知需要将数据包发给主机2,数据包到达主机2后再转发给主机2的docker0,最后由其将数据包转到container2中;反向原理相同,不再赘述。

我们心里方案想的是这样,接下来实践一下看看是否可行。

实际试验

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

编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask”

?
1
{ “bip”:”192.168.100.252/24″ }

编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask”

?
1
{ “bip”:”192.168.200.252/24″ }

• 2. 重启docker服务

主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效

?
1
systemctl restart docker

• 3. 添加路由规则

主机1上添加路由规则如下:

?
1
route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.18.141

主机2上添加路由规则如下:

?
1
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.18.162

• 4. 配置iptables规则

主机1上添加如下规则:

?
1
2
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上添加如下规则:

?
1
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容器:

?
1
docker run -it –name container1 centos /bin/bash

主机2上启动centos容器:

?
1
docker run -it –name container2 centos /bin/bash

• 分别在两台机器上安装ifconfig,并查看容器的ip,命令是:

?
1
2
[root@695ba390d221 /]# yum search ifconfig
[root@695ba390d221 /]# yum install net-tools.x86_64

主机1上的容器ip地址:

%小知识:Docker容器间通讯直接路由方式实现网络通讯-2猿站网-插图

主机2上的容器ip:

%小知识:Docker容器间通讯直接路由方式实现网络通讯-3猿站网-插图

• 6. 容器间直接通信

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

主机1上ping:

%小知识:Docker容器间通讯直接路由方式实现网络通讯-4猿站网-插图

主机2上ping:

%小知识:Docker容器间通讯直接路由方式实现网络通讯-5猿站网-插图

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://yq.aliyun.com/articles/602107

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux中文本处理工具之cut命令详解

2023-4-4 8:34:57

建站知识

小知识:详解docker私有仓库搭建与使用实战

2023-4-4 10:03:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索