问题现象

客户端访问对端服务器端口,时通时不通。


多数服务出现连接nacos 500问题

排查记录

  1. 检查服务到nacos的连接是否正常

    1. 通过进入到容器当中,去ping external-nacos.default.svc.cluster.local 可ping通
  2. 排查 nacos 状态,检查nacos是否正常

    1. 所有的中间件连接信息,均是通过nacos配置中心来获取配置
    2. kubectl get ep external-nacos.default.svc.cluster.local
    3. 逐一访问 endpoint 均正常
  3. 客户端telnet数据库端口,发现时通时不通

  4. 检查k8s 集群 cni mtu 发现,值为1430,初步怀疑是服务与应用交互的数据包过大,导致的超时,尝试修改cni插件的MTU值为1480。一般比物理网卡小20即可

    2. kubectl -n kube-system edit ds calico-node

  5. 重启服务,发现故障依旧

  6. 结合以往故障记录,由于k8s的pod均是使用的nat模式访问目标机器,怀疑目标机器未开启路由转发,登录到目标机器,查看确实未开启,追加后,重启服务器,故障依旧

  7. 登录到目标主机抓包,抓包分析发现收到包之后三次握手不成功,只有客户端发送过来的SYN包,并没有服务端返回的SYN+ACK包,所以无法建立连接。

$ tcpdump -i ens192 host 192.168.10.121 and port 22 -w a.cap`
$ tcpdump -i ens192 host 192.168.10.122 and port 22 -w b.cap`
$ tcpdump -i ens192 host 192.168.10.123 and port 22 -w c.cap`



8. 返回查看内核参数,发现有net.ipv4.tcp_tw_recycle参数,以前看别人遇到过类似问题https://www.jianshu.com/p/3b8f674f577e,该参数在4.12版本内核之后被废除,发现目标节点为3.10版本内核,尝试关闭此参数,重启服务,故障恢复

故障定位

因为2.6内核以上中tcp_timestamps默认是打开的,所以当打开 tcp_tw_recycle时会导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回 的SYN+ACK,推荐的解决方法是关闭tcp_tw_recycle,打开tcp_tw_reuse解决TIME-WAIT过多的问题。

tcp_tw_recycle 设置为 1 会开启系统对 TIME_WAIT 状态的 socket 的快速回收。开启这个功能,系统就会存下 TCP 连接的时间戳,当同一个 IP 地址过来的包的时间戳小于缓存的时间戳,系统就直接丢包,“回收”这个 socket。这个选项同样需要开启 tcp_timestamp 才生效。
开启这个功能是有很大风险的,服务器端会根据同一个 IP 发送过来的包的时间戳来判断是否丢包,而时间戳是根据发包的客户端的系统时间得来的,如果服务端收到的包是同一出口 IP 而系统时间不一样的两个客户端的包,就有可能会丢包,可能出现的情况就是一个局域网内有的客户端能连接服务端,有的不能。具体原因是客户端处于NAT模式下,出口ip可能是同一个ip,不同客户端的发送的时间戳可能乱序,服务器会检查相同ip地址发送来过的包的时间戳是不是小于缓存的时间戳,如果不是,直接丢掉。

问题解决

# 临时解决
$ echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle# 永久解决
$ vim /etc/sysctl.conf
net.ipv4.tcp_tw_recycle = 0$ sysctl -p

参考链接:
https://www.cnblogs.com/cyleon/p/16176888.html
https://www.jianshu.com/p/3b8f674f577e

tcp_tw_recycle 参数导致的K8S网络问题相关推荐

  1. cni k8s 插件安装_第一次,如此清晰脱俗的直解K8S网络

    图片出自:<你女儿也能看懂的插画版 Kubernetes 指南> K8S 网络设计原则 K8S 网络设计原则如下: 每个 Pod 都拥有一个独立 IP 地址,Pod 内所有容器共享该 IP ...

  2. 第四课 k8s网络基础学习-DNS和DHCP学习

    第四课 k8s网络基础学习-DNS和DHCP学习 tags: k8s网络 DNS DHCP 文章目录 第四课 k8s网络基础学习-DNS和DHCP学习 第一节 DNS介绍 第二节 DNS的linux使 ...

  3. 网络优化之net.ipv4.tcp_tw_recycle参数

    本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,(http://vincent.bernat. ...

  4. linux内net.ipv4.tcp_tw_recycle参数一定不要启用

    linux内net.ipv4.tcp_tw_recycle参数一定不要启用 net.ipv4.tcp_tw_recycle = 0 本文为转载译者achejq博客的原文,目的是为了加深自己知识点的记忆 ...

  5. 不要在linux上启用net.ipv4.tcp_tw_recycle参数

    本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后, ...

  6. 第八课 k8s网络基础学习-VxLAN基础

    第八课 k8s网络基础学习-VxLAN基础 tags: k8s网络 eNSP wireshark VxLAN 文章目录 第八课 k8s网络基础学习-VxLAN基础 第一节 VxLAN 1.1 VxLA ...

  7. 非全研究生计算机网络-k8s网络插件(CNI)性能分析

    由于计算机网络课程需要,看了一些k8s网络机制,随翻译了一篇论文,说实话有点空洞. 作者: Youngki Park School of Electronic Engineering Soongsil ...

  8. k8s网络基础学习-Calico网络插件

    第十课 k8s网络基础学习-Calico网络插件 tags: k8s网络 calico proxy arp bgp full mesh bgp RR 文章目录 第十课 k8s网络基础学习-Calico ...

  9. K8s网络插件Flannel,Calico

    文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...

最新文章

  1. 【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode
  2. 前端计划——面试题总结-CSS篇
  3. Python网络爬虫与信息提取(二)(BeautifulSoup库)
  4. LightTools 切趾角度设置
  5. 【Linux导论】通过图形接口配置系统(System Configuration from the Graphical Interface)
  6. 【Breadth-first Search 】785. Is Graph Bipartite?
  7. 推荐算法--推荐系统架构(06)
  8. HTML代码 笔记 部分
  9. 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件
  10. nginx linux脚本,控制 nginx shell脚本语言
  11. 超像素经典算法SLIC的代码的深度优化和分析
  12. 仿百度统计html模板,YJHL仿百度统计 | CNZZ统计友盟源码
  13. mysql cpu使用率_MySQL CPU使用率高情况的原因和解决
  14. HBase流程框架图
  15. 为什么响应式(自适应)网站是一个坑
  16. 【Unity3D】游戏研发团队及岗位职责
  17. MybatisPlus学习〖四〗报错篇 WARNWarn: Could not find @TableId in Class: com.fehead.OceanCode.dataobject
  18. 怎么找电脑服务器文档,电脑服务器地址怎么找
  19. 第二章 定义和构建索引(二)
  20. VTK 3D图像显示

热门文章

  1. Socket.io部署遇到的坑
  2. LeetCode——51. N 皇后
  3. Python 内置函数与匿名函数
  4. Android 实用自定义Dialog页面加载动画
  5. tcpdump丢包问题分析
  6. warning #225-D: function “InitXintf“ declared implicitly
  7. Web开发路线图(2020)
  8. 南通五年制计算机大专学校,2020年南通五年制大专录取分数线有哪些
  9. 聊聊「租房平台,虚假房源」
  10. MindSpore单卡GPU训练竟然报NCCL的错