【发布时间】:2020-08-11 02:35:56
【问题描述】:
我正在使用带有嵌入式 Tomcat 9.0.36 的 Spring Boot。它在 Kubernetes 中用作 Docker 映像。最近升级 envoy 后,我开始收到异常。
"upstream connect error or disconnect/reset before headers. reset reason: connection termination" with 503 status code
有些人建议将空闲连接超时时间增加到 60 秒,但在春季启动时,我能够找到“连接超时”和“保持活动超时”。我使用下面的代码将它们增加到 5 分钟。
@Configuration
public class TomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
private static final Logger LOGGER = LoggerFactory.getLogger(TomcatCustomizer.class);
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector -> {
AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
//Setting up connection time out
protocol.setKeepAliveTimeout(360000);
protocol.setConnectionTimeout(360000);
protocol.setMaxKeepAliveRequests(120);
});
}
}
仍然,我遇到了同样的错误。此应用程序在内部调用另一个服务,该服务也托管在 Kubernetes 中。我可以在我的服务中看到成功的响应,但在那之后,我看不到任何日志。
【问题讨论】:
-
这个错误在 istio 中经常出现。你能添加你的 istio 配置吗?你的 istio 版本、网关、虚拟服务、目标规则是什么?你用 mtls 吗?
-
实际上我无权访问这些。我只知道他们在早期版本代码中将 Envoy 版本升级到 14 工作正常。但是,我能够通过从内部服务获得的响应中删除标头来解决此问题。也许它阻止了一些标头,或者可能交叉检查了自己的标头。
-
很高兴听到您找到了答案。您能否添加一个答案并将其标记为已接受以提高知名度?
-
@jt97 我不知道如何将其标记为已接受。我已在回答中提供了所有详细信息。
标签: spring-boot tomcat kubernetes istio