Kubernetes POD 间歇性发送 RST 数据包

问题描述 投票:0回答:1

我有一个测试应用程序,它是 java Springboot Web 应用程序。它有一个 GET API,延迟为 1 秒。

我以每分钟 50 次调用的速率调用此 REST API,它工作正常,入口或日志上没有错误。然后我通过代码引入延迟,即让线程等待 30 秒再响应,这也可以完美地实现 50 次调用/分钟。

现在我将 GET API 恢复到 1 秒延迟,并通过混沌测试工具引入 30 秒延迟来重新测试。这导致一些请求失败,并在客户端出现 502 bad gateway 错误。

在入口处我看到以下错误:

[error] 1391018#1391018: *107956973 recv() failed (104: Connection reset by peer) while reading response header from upstream, 
client: 151.XX.XXX.6, server: abcd.corp.intranet, request: "GET /getHello/0 HTTP/1.1", upstream: "http://10.XX.XX.137:9023/getHello/0", host: "abcd.corp.intranet"

我尝试在入口处设置超时,如下所示,但没有帮助。

nginx.ingress.kubernetes.io/proxy-connect-timeout: '600'
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: '600'
nginx.ingress.kubernetes.io/proxy-read-timeout: '600'
nginx.ingress.kubernetes.io/proxy-send-timeout: '600'

在服务器端下面配置了超时:

server.tomcat.connection-timeout=60000
server.tomcat.accept-count=100
server.tomcat.keep-alive-timeout=60000
server.tomcat.max-keep-alive-requests=200
server.tomcat.max-connections=400
server.tomcat.threads.max=200
server.tomcat.threads.min-spare=20

然后我去了底层 pod(2 个 pod)并获取了 TCPDUMP,发现服务器正在立即为少数请求发送 RST 包。

TCPMDUMP 结果: enter image description here

我不确定是什么导致服务器发送 RST。如果有人能指出我正确的方向,我将不胜感激。我还可以研究什么来找出解决方案。

spring-boot kubernetes tomcat tcp nginx-ingress
1个回答
0
投票

我见过几次 K8s 集群中连接重置的原因之一与 conntrack 表已满有关。您可能也想查看一下。

另请参阅文章:调试间歇性连接重置。也许它可以引导您找到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.