Spring boot 上游连接错误或在收割台之前断开/重置。重置原因:使用Spring Boot时连接终止

Spring boot 上游连接错误或在收割台之前断开/重置。重置原因:使用Spring Boot时连接终止,spring-boot,tomcat,kubernetes,istio,Spring Boot,Tomcat,Kubernetes,Istio,我正在使用带有嵌入式Tomcat 9.0.36的Spring Boot。它在Kubernetes中用作Docker图像。最近升级特使后,我开始出现异常 "upstream connect error or disconnect/reset before headers. reset reason: connection termination" with 503 status code 有些人建议将空闲连接超时时间增加到60秒,但我发现“连接超时”和“保持活动超时”。我使用下面的代码将它们

我正在使用带有嵌入式Tomcat 9.0.36的Spring Boot。它在Kubernetes中用作Docker图像。最近升级特使后,我开始出现异常

  "upstream connect error or disconnect/reset before headers. reset reason: connection termination" with 503 status code
有些人建议将空闲连接超时时间增加到60秒,但我发现“连接超时”和“保持活动超时”。我使用下面的代码将它们增加到5分钟

@配置
公共类TomcatCustomizer实现WebServerFactoryCustomizer{
私有静态最终记录器Logger=LoggerFactory.getLogger(TomcatCustomizer.class);
@凌驾
公共void自定义(TomcatServletWebServerFactory){
factory.addConnectorCustomizers(连接器->{
AbstractHttp11协议=(AbstractHttp11协议)连接器。getProtocolHandler();
//设置连接超时
协议setKeepAliveTimeout(360000);
协议setConnectionTimeout(360000);
协议。SetMaxKeepAliverRequests(120);
});
}

}
我花了一周时间从应用程序的角度对此进行分析。我遵循了Ops团队建议的几个步骤

  • 将Tomcat服务器中的超时时间增加到60秒,因为它们在Emission中配置了相同的超时时间
  • 我确实增加了时间,但无法解决问题
  • 我使用SpringCloudGateway作为网关服务,我认为这就是问题所在,所以我将其更改为Rest模板,但这也没有解决问题
  • 幸运的是,除了那些在内部与其他服务通信的API之外,运行状况检查API工作正常。在健康API中,他们还与其他服务进行通信以检查他们的健康状况,但我没有直接返回响应。我正在包装响应主体,修改它并将其转发到UI。我也应用了同样的方法,并使用了下面的代码,您很容易理解。我创建了一个新的响应实体,删除了从内部API收到的所有头文件,并返回到UI。它很有魅力
//更早(将从内部服务接收到的相同头转发到UI)
ResponseEntity ResponseEntity=//通过调用其他API接收;
返回响应性;
//现在(删除标题)
ResponseEntity ResponseEntity=//通过调用其他API接收;
MultiValueMap newHeaders=新链接的MultiValueMap();
if(Objects.nonNull(responseEntity)和&Objects.nonNull(responseEntity.getBody()){
newHeaders.set(“内容类型”,responseEntity.getHeaders().getContentType().toString());
返回新的ResponseEntity(ResponseEntity.getBody(),newHeaders,ResponseEntity.getStatusCode());

}
istio中经常出现此错误。您可以添加您的istio配置吗?您的istio版本、网关、虚拟服务、目标规则是什么?你用MTL吗?事实上我没有这些。我只知道他们在早期版本中将特使版本升级到14,代码运行良好。然而,我能够通过从内部服务获得的响应中删除标题来解决这个问题。可能是它屏蔽了一些标题,或者是交叉检查了它自己的标题。很高兴听到你找到了答案。您能添加一个答案并将其标记为已接受以获得更多可视性吗?@jt97我不知道如何将其标记为已接受。我已经提供了答案中的所有细节。非常感谢。经过两周的努力,我能够解决这个问题!!