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

Knative v1.2.5搭配Istio1.12.7时queueproxy报反向代理错误如何修复

问题环境
  • Knative 版本:v1.2.5
  • Istio 版本:1.12.7
问题现象

服务运行过程中,每隔20分钟queue-proxy容器固定输出如下错误日志:

error: "context canceled"
knative.dev/key: "test-common-service/test-app-0-0-0"
knative.dev/pod: "test-app-0-0-0-deployment-xxxxxxx-xxxxx"
logger: "queueproxy"
message: "error reverse proxying request; sockstat: sockets: used 44
TCP: inuse 27 orphan 2 tw 20 alloc 593 mem 52
UDP: inuse 0 mem 3
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0"

注:日志中附带的sockstat为报错时自动采集的现场数据,从数值看TCP总占用、TIME_WAIT数量、socket内存占用均处于正常范围,不存在socket资源耗尽、文件描述符泄漏问题,无需往该方向排查。

排查与修复方案

固定20分钟周期触发的context canceled反向代理错误,本质是请求转发链路中某一侧主动中断了连接,和链路中各组件的空闲超时配置强相关,按以下顺序排查:

  • 核对queue-proxy自身超时配置
    执行如下命令查看queue-proxy启动参数中的--idle-timeout值:
    kubectl get deploy test-app-0-0-0-deployment -n test-common-service -o jsonpath='{.spec.template.spec.containers[?(@.name=="queue-proxy")].args}'
    
    Knative v1.2.5版本queue-proxy默认空闲超时为1200秒(即20分钟),和报错周期完全吻合。如果业务存在长连接、慢请求场景,默认超时会主动中断空闲过久的连接,触发该报错。可通过给Knative Service添加如下annotation按需调整超时值,不要盲目设置为无限大:
    metadata:
      annotations:
        queue.knative.dev/idle-timeout: "300s" # 按业务实际场景调整
    
  • 排查链路其他组件的超时配置
    1. 核对上游调用方(API网关、前端业务服务)的请求超时配置,如果调用方设置的超时时间小于业务接口实际处理时长,调用方主动断开连接时queue-proxy就会抛出该错误,需调整调用方超时时间匹配业务响应耗时,同时优化慢接口响应速度。
    2. 核对Istio流量规则配置,执行kubectl get destinationrule -A查看对应服务的连接池策略,如果DestinationRule中配置的connectionPool.tcp.idleTimeout小于业务连接空闲周期,Sidecar会主动回收空闲长连接触发报错,需调整该值和上下游超时保持一致。
    3. 核对工作负载所在节点的conntrack配置,执行sysctl net.netfilter.nf_conntrack_tcp_timeout_established查看内核已建立TCP连接的跟踪超时,如果该值被修改为1200秒(20分钟),conntrack表会主动回收空闲连接,导致代理转发时连接失效,需将该参数恢复为默认的432000秒(5天),同时开启TCP keepalive避免空闲连接被误清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34