安装完了Flanned,按道理来讲,网络应该是通的但是我的服务器就是不通,当时就据花疼了,后来发现,是自己容器的宿主机之间,防火墙搞的鬼,做法是将防火墙关闭
1、Flanned网络原理
数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。
源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一下的有docker0路由到达目标容器。
Flanned做的就是将数据的包进行封装,然后解包操作,原始数据是在起始节点的Flannel服务上进行UDP封装的,投递到目的节点后就被另一端的Flannel服务还原成了原始的数据包,两边的Docker服务都感觉不到这个过程的存在。
2、查看路由规则
目标容器地址(172.17.8.2)
本机容器地址(172.17.45.2)
route -n
可以看到,网络先进过我自己本机的网络,发现不匹配,后走了172.17.0.0/16网段(flannel0)
例如现在有一个数据包要从IP为172.17.45.2(本机)的容器发到IP为172.17.8.2(目标)的容器。根据数据发送节点的路由表,它只与172.17.0.0/16匹配这条记录匹配,因此数据从docker0出来以后就被投递到了flannel0。同理在目标节点,由于投递的地址是一个容器,因此目的地址一定会落在docker0对于的172.17.8.0/24(目标)这个记录上,自然的被投递到了docker0网卡。
3、网络访问
本机是172.17.45.0/24网段,访问 172.17.8.0/24网段 成功(我把目标主机的防火墙关闭了)
service iptables stop
打开了目标宿主机的防火墙,就完犊子了
service iptables restart
4、修改防火墙
//TODO 这个地方,我也不知道咋该规则,改了也没用,非常蛋疼啊,解决方案只能是关闭防火墙了,以后有方法了,在写出来吧。。