Kubernetes Ingress 中后端长连接复用由 Ingress Controller(如 nginx-ingress)控制,默认启用 upstream keepalive(32 连接、60s 超时),需通过 nginx.ingress.kubernetes.io/upstream-keepalive-connections 等注解调优,并确保后端服务支持 keep-alive 且响应头含 Connection: keep-alive。

在 Kubernetes Ingress 中,后端长连接复用(即 HTTP keep-alive 复用到上游服务)不是由 Ingress 资源本身直接控制的,而是由 Ingress Controller(如 nginx-ingress)的底层 Nginx 配置决定。Annotations 是向 nginx-ingress 传递定制化 Nginx 指令的主要方式,但需注意:keepalive 相关行为默认已启用且通常无需显式开启;真正需要配置的是上游连接池参数,以确保长连接被有效复用。
确认 nginx-ingress 默认行为
nginx-ingress(v1.0+)默认启用 upstream keepalive:
- 上游连接使用
keepalive 32(最多缓存 32 个空闲连接) - 连接超时(
keepalive_timeout)默认为 60s - 只要后端服务也支持 keep-alive(HTTP/1.1 默认开启),连接就会被复用
关键 Annotations 控制连接复用效果
若需调优复用能力(例如高并发场景下提升吞吐或降低后端建连压力),可通过以下注解调整:
-
nginx.ingress.kubernetes.io/upstream-keepalive-connections:设置每个 worker 进程可缓存的最大空闲 keepalive 连接数(默认 32)。建议根据后端实例数和 QPS 调整,例如:"200" -
nginx.ingress.kubernetes.io/upstream-keepalive-timeout:空闲连接最大存活时间(秒),默认 60。可设为"180"延长复用窗口 -
nginx.ingress.kubernetes.io/upstream-keepalive-requests:单个 keepalive 连接上最多处理的请求数(默认 1000)。设为"0"表示不限制(适合稳定长连接场景)
必须配合的服务端配置
仅配置 Ingress 注解不够——后端服务必须主动响应 keep-alive:
- 确保后端 Pod 的应用服务器(如 Nginx、Tomcat、Go net/http)未禁用 keep-alive
- 检查响应头是否含
Connection: keep-alive(HTTP/1.1 下默认存在) - 避免后端主动发送
Connection: close或过早关闭连接
验证是否生效
部署后可通过以下方式确认:
- 进入 nginx-ingress Pod,执行
curl -I http://backend-svc.default.svc.cluster.local,观察响应头中是否有Connection: keep-alive - 查看 Nginx 配置片段:
kubectl exec -n ingress-nginx deploy/ingress-nginx-controller -- cat /etc/nginx/nginx.conf | grep -A 10 "upstream.*your-service",确认含keepalive 200;等行 - 监控指标
nginx_ingress_controller_upstream_keepalive(Prometheus)看活跃连接数是否稳定增长而非频繁新建


















