为不可公开访问的后端设置 Cloud Monitoring 正常运行时间检查

问题描述

我在为某些不允许未经身份验证的调用的 Cloud Run 服务设置正常运行时间检查时遇到了一些问题。

就上下文而言,我使用 Cloud Endpoints + ESPv2 作为连接到一些 Cloud Run 服务的 API 网关。

ESPv2 容器/API 网关允许未经身份验证的调用,但底层 Cloud Run 服务不允许(因为对这些后端的请求流经 API 网关)。

每个 Cloud Run 服务都有一个内部运行状况检查端点,我希望通过 Cloud Monitoring 正常运行时间检查定期访问该端点。

这样做的目的是确保我的 Cloud Run 服务运行良好,而且还提供了额外的好处,即在容器保持“温暖”时减少冷启动时间

但是,由于受保护的 Cloud Run 服务需要有效的授权标头,因此来自 Cloud Monitoring 的所有请求都失败并显示 403。

从 Cloud Monitoring UI 来看,您似乎只能配置静态身份验证标头,这在这种情况下不起作用。我需要能够为每个从 Cloud Monitoring 发送的请求动态创建一个身份验证标头。

我可以看到 Cloud Scheduler 已经支持这一点。我在 Cloud Run 服务(未通过 API 网关公开)上有一些通过 Cloud Scheduler 访问的内部端点,并且我能够在每个请求上配置 OIDC 身份验证标头。理想情况下,我可以使用 Cloud Monitoring 做到这一点。

我可以看到一些解决方法,但都不太理想:

  • 允许对底层 Cloud Run 服务进行未经身份验证的调用。这将使我的内部服务可公开访问,然后我将不得不担心在每个服务中处理身份验证。

  • 通过 API 网关/ESPv2 公开内部端点。这实际上与之前的解决方法相同。

  • 通过 API 网关/ESPv2 公开内部端点并配置某种身份验证。这种工作,但在撰写本文时,ESPv2 支持的唯一身份验证方法是 API 密钥和 JWT。 JWT 已经不可能了,但我想 API 密钥会起作用。同样,这需要一些设置,如果可能,我宁愿避免。

希望对此有任何想法/建议。

谢谢!

解决方法

这个简单的解决方案可能适用于您的用例,因为在端口 443 上使用 TCP 正常运行时间检查更容易:

  1. 使用 https://cloud.google.com/run/docs/quickstarts/prebuilt-deploy 创建您自己的 Cloud Run 服务。

  2. 在 TCP 端口 443 Cloud Run URL 上创建新的正常运行时间检查。

  3. 等几分钟。

位置结果:所有位置都通过

弗吉尼亚好 俄勒冈州好 爱荷华州 比利时 好的 新加坡 OK 圣保罗好

我还想告诉您,Cloud Run 是 Google 完全托管的产品,它有一个 99.95 % monthly up time SLA,在过去几个月里有 no recent incidents,但是主动监控这一点是非常重要的也是好事。