AWS ALB默认最大连接时长是多少?K8s Websocket应用发布迁移疑问
AWS ALB与Websocket长连接核心问题解答
ALB的最大连接时长(Idle Timeout)
- 默认情况下,ALB的空闲超时时间是60秒,可手动调整至最大值4000秒(约66分钟)。这里的“空闲”指连接两端无数据传输的状态,若Websocket连接持续有心跳或数据交互,该超时不会触发。
- 若需支持超66分钟的持续活跃连接,只要保持连接有数据流动(比如客户端定期发送心跳帧),ALB就不会主动断开连接。
旧Pod连接超过1小时的行为
当发布流程中旧Pod被标记为终止(收到SIGTERM信号),关键行为如下:
- ALB停止转发新流量:旧Pod从K8s Service端点列表移除后,ALB不再向其转发新连接请求,但已建立的Websocket连接不会立即断开。
- Pod终止宽限期:K8s默认终止宽限期为30秒,你可通过Pod的
spec.terminationGracePeriodSeconds字段调整(无上限,受集群资源限制)。若旧Pod上的Websocket连接仍活跃,Pod会等待宽限期结束才会被强制杀死。 - 宽限期后的强制断开:若宽限期设置小于1小时,宽限期结束时K8s会发送
SIGKILL信号强制终止Pod,此时所有未断开的Websocket连接会直接中断;若宽限期≥1小时,只要连接活跃且宽限期未到,旧Pod会继续维持连接,直到宽限期结束或连接主动断开。 - ALB侧连接状态:只要旧Pod仍在运行且连接活跃,ALB不会主动断开已建立的Websocket连接(即使时长超1小时)。仅当Pod被强制终止后,ALB检测到后端连接失败,才会断开前端客户端连接。
优化建议
- 调整Pod终止宽限期:根据Websocket连接最长预期时长,设置合适的
terminationGracePeriodSeconds,比如3600秒(1小时)或更长,给旧连接足够时间自然断开。 - 配置Websocket心跳:让客户端定期发送心跳帧,避免ALB因连接空闲触发超时断开。
- 平滑流量迁移:使用K8s滚动更新策略(如
maxUnavailable: 0配合maxSurge),确保新Pod就绪后再逐步终止旧Pod,降低长连接中断概率。
内容的提问来源于stack exchange,提问作者Bidyut
相关产品推荐
相关产品推荐

