AKS环境中ingress-nginx持续对业务Pod建立断开TCP连接问题求助
现象原因
- 该规律性的TCP连接建连/断连行为来自ingress-nginx控制器默认开启的TCP后端健康检查机制:ingress-nginx会定期对所有配置的TCP转发后端Pod发起TCP连接探测,验证后端服务可用性,探测完成后立即断开连接,对应你观测到的日志特征。
- 日志中出现的两个客户端IP
10.244.0.47、10.244.1.83刚好匹配你配置的2个ingress-controller副本的Pod IP,进一步验证了请求来源为控制器自身的健康检查。 - 默认配置下TCP健康检查间隔为5秒,与你日志中4~6秒的断连/建连周期完全吻合。
解决方案
你可以根据业务需求选择以下任意一种方案调整:
方案1:调整健康检查频率(推荐)
无需关闭健康检查,仅调大探测间隔降低探测量,修改ingress-nginx的helm values配置如下:
ingress-nginx: controller: config: # 调整健康检查间隔为30秒,可根据业务需求自定义 proxy-healthcheck-interval: "30s" # 健康检查超时时间 proxy-healthcheck-timeout: "10s" # 连续3次探测失败才标记后端不可用 proxy-healthcheck-max-fails: "3"
升级helm release后即可生效,健康检查频率会明显降低,同时保留可用性探测能力。
方案2:关闭指定TCP端口的健康检查
如果业务对探测流量完全不能容忍,可单独关闭该6203端口的TCP健康检查,修改tcp配置如下:
ingress-nginx: tcp: # 末尾新增的:::false代表关闭该端口的健康检查 6203: "storage-he10/lb-plc-in-scale-service:6203:::false"
注意:关闭健康检查后,ingress-nginx无法感知后端Pod异常,可能会将流量转发到不可用的Pod,引发业务故障,非特殊场景不推荐使用。
方案3:调整空闲连接超时(适用于长连接业务)
如果你的业务使用长连接,观测到的断连是空闲连接被主动回收导致,可调整TCP连接空闲超时时间:
ingress-nginx: controller: config: # 调整空闲TCP连接超时为1小时,可根据业务场景自定义 proxy-stream-timeout: "3600s"
内容的提问来源于stack exchange,提问作者Ackdari
相关产品推荐
相关产品推荐

