无法连接到基本 Google 云 运行 服务:上游连接错误或 disconnect/reset 在 headers 之前。复位原因:远程复位错误
Unable to connect to basic Google Cloud Run service: upstream connect error or disconnect/reset before headers. reset reason: remote reset error
我已经成功 运行 GCP Cloud 运行 上的 gRPC 服务一年多了。突然,它停止工作并响应每个请求...
StatusCode="Unavailable", Detail="upstream connect error or disconnect/reset before headers. reset reason: remote reset"
没有新的修订或部署。它突然开始以这种方式响应。没有代理,没有 VPC,没有网关,没有入口控制器,我只是使用 Cloud 运行 提供的 URL 指定端口 443。这是最简单的部署。
我试过禁用端到端 HTTP/2(以前有效),用新名称创建一个全新的服务实例,更改运行时环境代数,所有这些都没有让我更接近解析度。我还没有迁移到使用 ESPv2,所以这也不应该是一个问题。
可能是什么原因造成的?
我之前遇到过与您描述的完全相同的问题 - 花费了数小时 debugging/redeploying 等。我验证了 GRPC 服务器成功返回,并关闭了 .net 核心的 rabbit-hole处理 http2 明文和 tls negotiation/downgrading(因为 cloudrun 终止了 TLS,而 .net core GRPC 似乎讨厌未加密的 HTTP2 有效负载)——这让我几乎无处可去,什么也没修复。
最后,我第二天回来了 - 重新部署了一些旧的修订版(之前已经损坏)并且一切正常。
我的假设是在 cloudrun 方面发生了一些事情...但不确定。
(显然不是一个好的答案,但没有评论的声誉)。
当一个新连接打开时,Cloud 运行 检查它是否在第一个请求中有 content-type=application/grpc h2 header。 Cloud 运行 匹配 gRPC 后,它会将所有连接发送到 gRPC 服务器。
有时,禁用云 运行 http/2 end-to-end(您提到您已经尝试过)可以解决 ServerFault case 中建议的问题。
您收到的大部分错误似乎表明 ESPv2 无法到达服务的后端。
作为解决方法,我建议您使用以下方法来减轻错误。
按照建议使用正确的后端地址配置 ESPv2 here。
如果 ESPv2 已经配置,强制它通过 --backend_dns_lookup_family_flag. You can check more details under the “DNS lookup” section in this documentation.
使用 IPv4 地址
将您的请求配置为 gRPC 请求。
另外,看看这个GitHub Link。
#NotAnAnswer
这里是link事件详情
https://status.cloud.google.com/incidents/qfgJm8m4WPn2Ej2Z7vc2
2月10日开始!
我不确定您是否遇到了与我相同的问题,但此错误往往自 2021 年 4 月 15 日(左右)起在 .NET GRPC 或 HTTP/2 服务器上发生.
这是我在 Whosebug 上针对我自己的问题写的答案:。您会发现那里支持 Google 云平台答案和修复路线图。
好吧,经过大量调查并使用来自社区的一些非常有用的链接,结果发现 Envoy 的 GCP Cloud 运行 内部存在一个破坏性错误。一些 headers 被删除,这导致一些 gRPC 调用没有被正确路由。因为我使用的是 .NET 6,所以我能够在我的 Kestrel 配置中使用以下添加...
webBuilder.ConfigureKestrel(options =>
{
...
options.AllowAlternateSchemes = true;
});
...根据 Google 的建议解决问题。他们应该在发布当天修复潜在的错误。谢谢大家
我已经成功 运行 GCP Cloud 运行 上的 gRPC 服务一年多了。突然,它停止工作并响应每个请求...
StatusCode="Unavailable", Detail="upstream connect error or disconnect/reset before headers. reset reason: remote reset"
没有新的修订或部署。它突然开始以这种方式响应。没有代理,没有 VPC,没有网关,没有入口控制器,我只是使用 Cloud 运行 提供的 URL 指定端口 443。这是最简单的部署。
我试过禁用端到端 HTTP/2(以前有效),用新名称创建一个全新的服务实例,更改运行时环境代数,所有这些都没有让我更接近解析度。我还没有迁移到使用 ESPv2,所以这也不应该是一个问题。
可能是什么原因造成的?
我之前遇到过与您描述的完全相同的问题 - 花费了数小时 debugging/redeploying 等。我验证了 GRPC 服务器成功返回,并关闭了 .net 核心的 rabbit-hole处理 http2 明文和 tls negotiation/downgrading(因为 cloudrun 终止了 TLS,而 .net core GRPC 似乎讨厌未加密的 HTTP2 有效负载)——这让我几乎无处可去,什么也没修复。
最后,我第二天回来了 - 重新部署了一些旧的修订版(之前已经损坏)并且一切正常。
我的假设是在 cloudrun 方面发生了一些事情...但不确定。
(显然不是一个好的答案,但没有评论的声誉)。
当一个新连接打开时,Cloud 运行 检查它是否在第一个请求中有 content-type=application/grpc h2 header。 Cloud 运行 匹配 gRPC 后,它会将所有连接发送到 gRPC 服务器。
有时,禁用云 运行 http/2 end-to-end(您提到您已经尝试过)可以解决 ServerFault case 中建议的问题。
您收到的大部分错误似乎表明 ESPv2 无法到达服务的后端。
作为解决方法,我建议您使用以下方法来减轻错误。
按照建议使用正确的后端地址配置 ESPv2 here。
如果 ESPv2 已经配置,强制它通过 --backend_dns_lookup_family_flag. You can check more details under the “DNS lookup” section in this documentation.
使用 IPv4 地址将您的请求配置为 gRPC 请求。
另外,看看这个GitHub Link。
#NotAnAnswer
这里是link事件详情
https://status.cloud.google.com/incidents/qfgJm8m4WPn2Ej2Z7vc2
2月10日开始!
我不确定您是否遇到了与我相同的问题,但此错误往往自 2021 年 4 月 15 日(左右)起在 .NET GRPC 或 HTTP/2 服务器上发生.
这是我在 Whosebug 上针对我自己的问题写的答案:
好吧,经过大量调查并使用来自社区的一些非常有用的链接,结果发现 Envoy 的 GCP Cloud 运行 内部存在一个破坏性错误。一些 headers 被删除,这导致一些 gRPC 调用没有被正确路由。因为我使用的是 .NET 6,所以我能够在我的 Kestrel 配置中使用以下添加...
webBuilder.ConfigureKestrel(options =>
{
...
options.AllowAlternateSchemes = true;
});
...根据 Google 的建议解决问题。他们应该在发布当天修复潜在的错误。谢谢大家