Azure Kubernetes TCP长连接提前断开 如何配置30分钟超时阈值
解决方案
首先要明确:你通过helm --set tcp.8485=xxx方式暴露的TCP服务,普通Ingress资源的注解不会生效,这类配置需要直接调整ingress-nginx控制器的全局TCP代理参数,按以下步骤调整即可:
1. 调整ingress-nginx的TCP超时配置
重新升级你的ingress-nginx helm release,新增TCP代理超时相关参数:
helm upgrade nginx-ingress ingress-nginx/ingress-nginx \ --set tcp.8485="default/device-gateway:8485" \ --set configmap.tcp-proxy-timeout="1800s" \ --set configmap.enable-tcp-keepalive="on" \ --set configmap.tcp-keepalive-time="300" \ --set configmap.tcp-keepalive-intvl="60" \ --set configmap.tcp-keepalive-probes="5" \ # 保留你之前的其他无关配置参数
参数说明:
tcp-proxy-timeout:TCP连接无数据流量时的超时时间,直接设为1800s(30分钟)匹配你的需求- 开启TCP keepalive相关参数可以主动探测连接有效性,避免中间网络设备静默掐断空闲连接
2. 确认后端服务的TCP超时配置
检查你的device-gateway应用本身的TCP空闲超时设置,确保应用层面没有设置小于30分钟的连接断开逻辑,同时建议在应用层面也开启TCP keepalive。
3. 验证配置生效
升级完ingress-nginx后,检查ingress-nginx的ConfigMap配置是否正确写入:
kubectl get configmap nginx-ingress-controller -o yaml | grep -i tcp
之后用移动端设备发起长连接测试,验证10分钟后连接不会被断开即可。
内容的提问来源于stack exchange,提问作者HansElsen
相关产品推荐
相关产品推荐

