码迷,mamicode.com
首页 > 其他好文 > 详细

centos7下安装docker(12.4容器如何与外部进行通信)

时间:2017-10-28 19:01:51      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:发送   转换   ges   通信   请求   替换   做了   pdu   www.   

 

 

1.容器如何访问外部

前面我们做了很多试验:只要host能连外网,使用默认bridge(docker0)创建得容器就能访问外网,那么容器是怎样访问外网的呢?

注:这里的外网不仅是internet,包括internet

技术分享

容器是怎样访问外网的呢?

这里的关键就是NAT。我们查看一下docker host上的iptables的规则

技术分享

可以看到iptables对docker0这个bridge做了策略:当网桥docker0收到外出的包,把他交给MASQUERADE处理。而MASQUERADE的处理方式是将包的源地址替换成host地址发送出去,即做了一次网络地址转换(NAT)

 

 

我们可以通过tcpdump查看地址如何转换。先查看docker host的路由表:

技术分享

默认路由通过ens160(host网卡) 发出去的,所以我们要同时监控ens160和docker0上的icmp(ping)数据包

技术分享

源地址容器发送请求

技术分享

docker0接收到源地址的请求,docker0将请求交给MASQURADE进行处理

技术分享

我们可以看到ens160的变化:MASQUERADE将源地址的包转换成Host的地址,发送出去(这就是NAT的网络地址转换,深刻理解了)

这就是iptables NAT规则的处理结果,从而保证数据包能到达外网

继续盗图技术分享

处理过程:1.容器发送ping包:172.17.0.5>www.baidu.com

                  2.docker0收到包后,发现是发送到外网的。交给NAT处理

                 3.NAT将源地址转换成ens160的IP:192.168.7.222>www.baidu.com

                 4.ping包从ens160发出去。到达www.baidu.com

通过NAT,docker容器实现了对外网的访问。

 

centos7下安装docker(12.4容器如何与外部进行通信)

标签:发送   转换   ges   通信   请求   替换   做了   pdu   www.   

原文地址:http://www.cnblogs.com/lkun/p/7747459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!