当前位置: 首页 > article >正文

kubernetes proxy中 发现长时间运行的tcp连接 如何处理invalid包 如果更优雅的解决需要修改哪个参数?

在 Kubernetes 中,kube-proxy 是一个关键组件,用于管理服务的虚拟 IP 和负载均衡流量。处理长时间运行的 TCP 连接时,如果出现无效(invalid)包,kube-proxy 需要正确处理这些包,以防止连接中断或服务异常。

1. 如何处理无效(invalid)包

  • 无效(invalid)包可能出现在长时间运行的 TCP 连接中,这通常是由于连接超时、网络抖动或 NAT 会话过期等原因导致的。
  • 在 kube-proxy 中,这些包通常会被标记为 INVALID,并由 Linux 内核的 conntrack 模块管理。默认情况下,这些包可能会被丢弃。

2. 调整 conntrack 超时时间

  • 为了更优雅地处理长时间运行的 TCP 连接,避免出现无效包的情况,可以调整 Linux 内核中的 conntrack` 表项的超时时间。
  • 主要的超时参数有:
    • net.netfilter.nf_conntrack_tcp_timeout_established: 这个参数定义了已经建立的 TCP 连接在没有活动时的超时时间。默认值通常为 5 天(432000 秒)。
    • net.netfilter.nf_conntrack_tcp_timeout_close_wait: 定义了 TCP 连接处于 CLOSE_WAIT 状态时的超时时间。
  • 调整这些参数可以通过以下命令进行:
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=86400  # 设为1天
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=3600    # 设为1小时
  • 这些设置可以减少长时间 TCP 连接出现无效包的概率,从而避免不必要的连接中断。

3. 调整 kube-proxy`conntrack**** 配置

  • kube-proxy 可以通过一些参数来更好地管理 conntrack 表的行为:
    • –conntrack-tcp-timeout-established`: 设置已经建立的 TCP 连接的超时时间。
    • –conntrack-max-per-core: 设置每个 CPU 核心的最大 conntrack 表项数目,默认是 32,000 条。这可以防止 conntrack` 表溢出。

例如,启动 kube-proxy 时,可以设置:

kube-proxy --conntrack-tcp-timeout-established=86400s --conntrack-max-per-core=131072

4. 使用 TCP Keepalive

  • 另一种优雅的解决方案是启用 TCP Keepalive 机制,通过在 TCP 连接上定期发送保活探测包来检测并维护连接状态。
  • 这可以通过以下系统参数配置:
sysctl -w net.ipv4.tcp_keepalive_time=600    # 10分钟
sysctl -w net.ipv4.tcp_keepalive_intvl=75    # 每75秒发送一个keepalive包
sysctl -w net.ipv4.tcp_keepalive_probes=9    # 尝试9次后放弃
  • 启用 Keepalive 可以帮助检测到已失效的连接,并及时释放相应的 conntrack 表项,防止无效包产生。

总结

  • 处理无效包: Kubernetes 中的 kube-proxy 会依赖 Linux 内核的 conntrack 模块来管理连接状态。调整 conntrack` 的超时设置是避免长时间 TCP 连接中无效包产生的有效方法。
  • 优化连接管理: 通过调整 conntrack 参数和启用 TCP Keepalive,可以更优雅地管理长时间运行的 TCP 连接,从而减少连接中断和无效包的发生。

要实现这些优化,可以通过调整系统级别的 sysctl 参数和 kube-proxy 的配置来实现。


http://www.kler.cn/a/557954.html

相关文章:

  • 透彻理解:方差、协方差、相关系数、协方差矩阵及其应用
  • HTML之JavaScript DOM简介
  • 激光雷达YDLIDAR X2 SDK安装
  • 微信小程序中将图片截图为正方形(自动居中)
  • C++ MFC添加RichEditControl控件后,程序启动失败
  • windows环境下用docker搭建php开发环境dnmp
  • 【Bluedroid】AVRCP 连接源码分析(一)
  • Nginx web服务器+uWSGI web服务器+Django生产环境部署
  • OpenCV卡尔曼滤波器使用详细教程
  • HarmonyOS 应用下载网络文件保存到本地公共目录
  • 计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
  • 基于Python+Vue开发的反诈视频宣传管理系统源代码
  • [数据结构]栈详解
  • Java集合框架全解析:从LinkedHashMap到TreeMap与HashSet面试题实战
  • ai-financial-agent - 为金融投资打造的AI代理
  • 【无标题】云原生作业六
  • IDEA使用git不提示账号密码登录,而是输入token问题解决
  • 简识Spring创建Bean方式和设计模式
  • 嵌入式LINUX驱动开发(三)-设备树驱动led
  • 红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC1打靶PHP-RCE三层代理路由防火墙上线密码喷射域控提权