无法连接到基本的Google Cloud Run服务:上游连接错误或标头之前断开连接/重置.重置原因:远程重置错误



一年多来,我一直在GCP Cloud Run上成功运行gRPC服务。突然,它停止了工作,并用。。。

StatusCode="Unavailable", Detail="upstream connect error or disconnect/reset before headers. reset reason: remote reset"

没有新的修订或部署。它突然开始做出这样的反应。没有代理,没有VPC,没有网关,没有入口控制器,我只是使用Cloud Run提供的URL,指定了443端口。这是最简单的部署方式。

我尝试过禁用端到端HTTP/2(以前有效(,用新名称创建一个全新的服务实例,更改运行时环境生成,所有这些都没有让我更接近解决方案。我还没有迁移到使用ESPv2,所以这也不应该是一个问题。

可能是什么原因造成的?

好吧,经过大量调查和社区中一些非常有用的链接,发现在GCP Cloud Run for Envoy的掩护下出现了一个突破性错误。删除了一些标头,导致某些gRPC调用无法正确路由。由于我使用的是.NET6,我可以在Kestrel配置中使用以下添加。。。

webBuilder.ConfigureKestrel(options =>
{
...
options.AllowAlternateSchemes = true;
});

按照谷歌的建议来解决这个问题。他们应该在发布当天修复潜在的错误。谢谢大家。

我之前遇到过与您描述的完全相同的问题-花了数小时调试/重新部署等。我验证了GRPC服务器成功返回,net core对http2明文和tls协商/降级的处理陷入了一个兔子洞(因为cloudrun终止了tls,.net core GRPC似乎讨厌未加密的http2有效载荷(——这让我几乎一无所获。

最后,我第二天回来了——重新部署了一些旧的修订(以前坏了(,一切都奏效了。

我的假设是,事情的阴云密布。。。但不确定。

(显然不是一个好的答案,但没有评论的声誉(。

打开新连接时,Cloud Run会检查第一个请求中是否有content-type=application/grpc h2标头。一旦Cloud Run与gRPC匹配,它就会将所有连接发送到gRPC服务器。

有时,如ServerFault案例中所建议的那样,禁用云端到端运行http/2(您提到您已经尝试过了(可以解决问题。

您收到的错误似乎主要表明ESPv2无法访问服务的后端。

作为一种变通方法,我建议您使用以下方法来减轻错误。

  1. 使用此处建议的正确后端地址配置ESPv2。

  2. 如果已经配置了ESPv2,请通过--backend_dns_lookup_family_flag强制其使用IPv4地址。您可以在本文档的"DNS查找"部分查看更多详细信息。

  3. 将您的请求配置为gRPC请求。

另外,看看这个GitHub链接。

#NotAnAnswer

以下是事件详细信息的链接

https://status.cloud.google.com/incidents/qfgJm8m4WPn2Ej2Z7vc2

它开始于2月10日!

我不确定你是否遇到了和我一样的问题,但这个错误往往发生在2021年4月15日左右的.NET GRPC或HTTP/2服务器上。

以下是我在stackoverflow上就自己的问题写的答案:https://stackoverflow.com/a/71249250/4829094.你会发现支持谷歌云平台的答案和修复路线图。

最新更新