我有一个设置了 Istio 网关的 Kubernetes 环境。我偶然发现了一个我似乎无法解决的问题。
我们创建了一个为 API 提供服务的 Nodejs 后端微服务,其中一个 API 端点可以提供 100MB 以上的大型响应。 Istio Proxy sidecars 支持我们所有的微服务部署。
我尝试的第一种方法是使用流式响应。当我向这个 API 发出请求并且我知道我可以期待如此大的响应时,它总是在两分钟后被切断(或大约 96MB 的流式响应)。
我采用的另一种方法是在后端构建响应,然后返回整个响应,但两分钟后出现类似的失败响应。有趣的是,我可以在后端的日志中观察到
Request aborted by the client
,然后 Istio 网关再次尝试向后端发送具有相同 Id 的相同请求两次,但都以同样的方式失败。
如果我直接在 Pod 上
curl
请求,从而完全绕过网关,我会在大约 2 分 39 秒后收到 109 MB 的完整响应,没有任何问题,所以这让我确信问题出在网关级别。
我已经尝试在我正在使用的虚拟服务上手动将超时限制设置为 300 秒,以防万一,但结果是一样的。
我的第二个选择是尝试增加 Istio Proxy sidecar 上 readiness Probe 的数量
failureTreshold
配置,以防健康请求超时,在请求完成之前,这在这种情况下也没有产生任何积极的结果。
我检查了 Istio sidecar 的日志,我相信那里发生了一些事情。在此屏幕截图中,您可以看到重新创建了整个连接 - 这是两分钟后发生的情况
这里是一个完整的日志:istio.log
我希望有人能帮我解决问题,因为我想不出是什么导致了这个问题。如果需要任何其他信息,我很乐意提供。