您的位置:首页 > 运维架构 > Docker

跨主机Docker网络间歇性无法访问的原因

2018-09-29 19:25 190 查看

Docker网络间歇性无法访问的原因

       随着访问量增加,偶然间发现部署在docker上的某种web服务会发生间歇性的卡死,起初认为是防火墙原因,经过再三排查并没有发现任何异常记录。

       通过抓包发现客户端向服务器发送了SYN后,服务端虽然收到了SYN,但是并没有做任何处理,数据包被丢弃了。经过一段时间后测试又恢复正常,可以响应SYN ACK,并且正确建立了连接。服务端在测试环境中运行正常,没有出现过类似的问题,由此可见问题依然产生在网络环境上。

       Docker发布服务时使用了iptables的nat转发,手动删除对应服务的SNAT规则后发现SYN ACK响应正常,由此推断问题出现在SNAT上,经过调查发现由于网络是基于nat转发且经过snat后,源ip地址均会变更为公网地址,就会导致同一个地址的数据包头部时间戳是乱序的,并不能保证线性增长,如果开启/etc/sysctl.conf中的net.ipv4.tcp_tw_recycle后,一旦有某个客户端断开,服务端可能会将该源ip地址中时间戳相对较小的数据包丢弃,导致连接失败。

      关闭net.ipv4.tcp_tw_recycle后问题解决。

 

     

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐