在一个 GCP 项目中来自 Cloud Run 应用的 HTTP 503 错误,但在另一个项目中没有
Posted
技术标签:
【中文标题】在一个 GCP 项目中来自 Cloud Run 应用的 HTTP 503 错误,但在另一个项目中没有【英文标题】:HTTP 503 errors from Cloud Run app in one GCP projects but not the other 【发布时间】:2020-11-04 10:36:57 【问题描述】:问题
我在 2 个项目上使用相同的容器(类似的资源)——生产和登台。两者都使用云闪现 DNS 设置自定义域,并且位于同一区域。容器构建在完全不同的项目中完成,IAM 用于处理对这些容器的访问。两个项目服务的所有 5 项服务都有 80 次并发和 300 秒超时。
3 天前一切正常,但从昨天开始,几乎所有暂存的云运行服务(谢天谢地)开始随机抛出 503,并且对于大多数请求。有些服务甚至一周都没有部署。相同的容器在生产项目中运行良好,没有问题。
排除的原因
与 Cloudflare 有任何关系(我尝试了 URL cloud run 给出的 503 问题) 任何带有构建或容器的东西(我用 go 尝试了演示 hello world 容器 - 它也有问题) 资源:我尝试为其提供 1 GB ram 和 2 cpus,但问题仍然存在 部署问题(部署多个分支 - 无效) 代码问题(只是将流量路由到 2-3 天前的旧版本,但问题仍然存在) 服务级别的问题(我使用同一个容器创建了一个全新的服务,它也有问题)可能的原因
云运行或云运行负载平衡器上的某些内容 可能有一些环境变量,但这似乎也不是问题响应代码
我刚刚使用 vegeta(30 秒,10 rps)对静态文件路径的暂存和生产相同的容器进行了快速检查,以下是响应:
分期 生产如果有人对此有任何见解,那将有很大帮助。
【问题讨论】:
【参考方案1】:根据您的解释,我无法理解发生了什么。您解释了哪些不起作用,但没有指出哪些起作用(您的应用程序在本地运行吗?您能运行一个 hello world 示例应用程序吗?)
所以我会推荐一些调试技巧。
如果您收到 HTTP 5xx 状态代码,请首先检查您的应用程序的日志。它是否打印任何日志?是否有请求日志?您的应用程序是否具有并部署了“详细”日志记录设置?
尝试直接访问您的 *.run.app
域。如果它不起作用,那么它不是域或 dns 或 cloudflare 问题。尝试调试和/或重新部署您的应用程序。首先部署一些有效的东西。如果 *.run.app
域有效,则问题不在 Cloud Run 中。
确保您没有在代理模式下使用 Cloudflare(例如,您的 DNS 指向 Cloud Run;而不是 Cloudflare),因为当域在 Cloudflare 之后,证书颁发/续订存在一个已知问题。
除此之外,如果重新部署似乎可以解决您的问题,不妨尝试重新部署。很可能最近某些配置在两个不同的项目中变得不同。
【讨论】:
* 日志:我也可以在日志上看到 503,这些日志来自云运行日志。 * 我尝试访问它也给出 503 的 *.run.app 域,它不是 DNS 或域 IMO。 * 尝试部署、重新部署、更多资源,但对于该项目没有任何帮助。 * 它在 3 天前的云耀斑中运行良好,我认为这不是问题,因为 *.run.app 即使使用 hello run go 容器也有同样的问题。 * 应用程序在本地运行良好,而在另一个项目上它只在它有问题的临时项目上运行。 看起来这个应用程序也面临同样的问题:recycler-mvdcj7favq-uc.a.run.app 随机请求甚至像图像这样的静态文件遇到 503——在这里找到它:***.com/questions/61037012/…——截图——i.imgur.com/018S5Qz.png 或如果第一个请求达到 503,甚至整个应用程序都不会加载。 这里是回收站应用的响应代码截图:imgur.com/46QCFUM【参考方案2】:查看 Cloud Run 疑难解答
https://cloud.google.com/run/docs/troubleshooting
您是否在高负载下看到 503 错误? Cloud Run(全托管)负载均衡器努力将传入请求分配到必要数量的容器实例上。但是,如果您的容器实例使用大量 CPU 来处理请求,则容器实例将无法处理所有请求,并且某些请求会返回 503 错误代码。
要缓解这种情况,请尝试降低并发性。从并发 = 1 开始,逐渐增加它以找到可接受的值。详情请参阅设置并发。
【讨论】:
以上是关于在一个 GCP 项目中来自 Cloud Run 应用的 HTTP 503 错误,但在另一个项目中没有的主要内容,如果未能解决你的问题,请参考以下文章
了解来自 GCP 的“需要采取行动”的电子邮件,重新:启用 Cloud Build API
Docker容器上传到gcp cloud-run,核心Web api应用程序不起作用
在 GCP 存储桶中创建对象时触发通过 Cloud Run 部署的数据流作业
Terraform GCP:无需用户停机即可更新 Cloud Run 服务