You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Ingress在JMeter 50/分钟负载+30秒延迟下返回502问题排查

问题排查与解决建议

问题背景

部署在Rancher上、以Tomcat容器运行的Java Web应用,在每分钟50次HTTP SOAP调用的正常负载下运行稳定,请求耗时2-4秒。但通过混沌测试工具引入30秒响应延迟后,JMeter发起的请求出现异常:部分立即返回502错误,部分60秒后返回,部分耗时更久;400次请求中约20次被丢弃并返回502。Pod的CPU、内存使用率均低于50%,调整Ingress超时参数后问题未解决,Ingress侧出现如下错误日志:

[error] 260453#260453: *389426939 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 11.22.33.44, server: abc.def.intranet, request: "POST /hello/0 HTTP/1.1", upstream: "http://11.22.33.44:9023/hello/0", host: "abc.def.intranett"

Ingress当前配置如下:

nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/client-max-body-size: 10m
nginx.ingress.kubernetes.io/proxy-body-size: 10m
nginx.ingress.kubernetes.io/proxy-connect-timeout: '600'
nginx.ingress.kubernetes.io/proxy-next-upstream: error timeout http_502 non-idempotent
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: '650'
nginx.ingress.kubernetes.io/proxy-next-upstream-tries: '3'
nginx.ingress.kubernetes.io/proxy-read-timeout: '600'
nginx.ingress.kubernetes.io/proxy-send-timeout: '600'
nginx.ingress.kubernetes.io/session-cookie-name: JSESSIONID
nginx.ingress.kubernetes.io/ssl-passthrough: 'false'
nginx.ingress.kubernetes.io/ssl-redirect: 'false'

排查方向

  • Tomcat连接与超时配置:检查server.xml中Connector的connectionTimeout、keepAliveTimeout、maxConnections、maxThreads参数,延迟场景下请求堆积可能导致Tomcat主动关闭连接,触发Connection reset by peer;确认Tomcat长连接是否被提前回收。
  • Kubernetes Service的连接管理:检查Service的sessionAffinity配置,若为ClientIP可能导致请求集中到单个Pod引发连接堆积;查看kube-proxy的连接超时或复用策略,是否存在上游连接意外中断的情况。
  • Nginx Ingress的连接池配置:当前仅配置代理超时,缺失proxy_http_version、proxy_set_header Connection等长连接相关配置,可能导致Ingress与Tomcat之间连接频繁断开重建;确认proxy-next-upstream的non-idempotent是否限制了重试逻辑触发。
  • 混沌测试工具的影响范围:验证延迟注入是否仅针对应用容器,是否误影响Ingress与Pod之间的网络链路,导致连接被强制重置。

解决建议

  1. 调整Tomcat连接配置
    修改server.xml的Connector节点,延长超时时间并调整连接、线程数:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="120000"
               keepAliveTimeout="120000"
               maxConnections="2000"
               maxThreads="500"
               enableLookups="false"
               redirectPort="8443"/>
    

    重启Tomcat容器生效。

  2. 优化Service与Ingress的连接配置

    • 若Service启用ClientIP会话亲和性,改为None让请求均匀分布:
      apiVersion: v1
      kind: Service
      metadata:
        name: your-app-service
      spec:
        sessionAffinity: None
        # 其他原有配置
      
    • 在Ingress中添加长连接相关配置:
      nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
      nginx.ingress.kubernetes.io/proxy-set-header: "Connection \"keep-alive\""
      nginx.ingress.kubernetes.io/upstream-keepalive-connections: "100"
      nginx.ingress.kubernetes.io/upstream-keepalive-timeout: "600"
      
  3. 调整Ingress重试逻辑
    若SOAP接口支持重试,移除non-idempotent参数,让Nginx对502错误进行重试:

    nginx.ingress.kubernetes.io/proxy-next-upstream: error timeout http_502
    
  4. 验证混沌测试配置
    检查混沌测试工具规则,确保延迟仅注入到应用业务逻辑中,而非Pod的整个网络栈,避免干扰Ingress与Pod之间的连接。

内容的提问来源于stack exchange,提问作者vick_4444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:05:14