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

K8s Nginx Ingress TCP流:上游断开时维持客户端连接

TCP负载均衡下维持客户端长连接的Nginx Ingress配置调整

你当前的配置未覆盖上游服务主动断开的触发场景,且缺少维持客户端与Nginx之间长连接的关键参数,导致上游断开时客户端连接同步终止。以下是修正后的配置及关键说明:

修正后的Nginx Server配置

server {
    preread_by_lua_block {
        ngx.var.proxy_upstream_name="tcp-my-namespace-my-service-7550";
    }

    listen                  7550;

    # 开启客户端与Nginx之间的TCP保活,维持长连接
    proxy_socket_keepalive  on;
    # 设置客户端连接超时为极大值,满足"绝不关闭"需求(可按需调整)
    proxy_timeout           86400s;
    # 控制Nginx连接新上游的超时时间
    proxy_connect_timeout   10s;

    # 明确指定触发上游重试的场景,包含上游主动断开
    proxy_next_upstream     error timeout invalid_header http_500 http_502 http_503 http_504 closed;
    proxy_next_upstream_timeout 600s;
    proxy_next_upstream_tries   3;

    proxy_pass              upstream_balancer;
}

核心参数解释

  • proxy_socket_keepalive on:启用Nginx与客户端之间的TCP保活机制,避免Nginx主动断开客户端连接,同时能检测客户端存活状态。
  • proxy_timeout 86400s:将客户端连接超时设为1天(可根据业务需求调至更大值),防止Nginx因超时而主动终止长连接。
  • proxy_next_upstream 补充closed参数:当上游服务主动关闭连接时,触发Nginx重新选择可用上游节点转发流量,这是你当前配置缺失的核心触发条件。
  • proxy_connect_timeout:限制Nginx连接新上游的超时时间,避免重试过程中阻塞太久。

额外注意事项

  1. 上游Pod滚动更新时,需配置合理的terminationGracePeriodSeconds,给Nginx足够时间切换到新Pod,减少流量中断风险。
  2. 若使用Nginx Ingress Controller的标准TCP配置(而非自定义server块),需通过ConfigMap或nginx.ingress.kubernetes.io/server-snippet注解注入上述参数(不同版本的Ingress Controller配置方式略有差异)。
  3. 测试时可手动杀掉单个上游Pod,验证客户端连接是否保持,流量是否自动切换至其他可用节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:54:28