在公共 Cloud Run 服务上使用 Pub/Sub

Posted

技术标签:

【中文标题】在公共 Cloud Run 服务上使用 Pub/Sub【英文标题】:Using Pub/Sub on a public Cloud Run service 【发布时间】:2021-07-07 12:53:57 【问题描述】:

根据 Cloud Run 的“Authenticating service-to-service”文档,要在服务上使用 Pub/Sub 和 Cloud Scheduler,必须禁用未经身份验证的访问,因为它们依赖于 HTTP 调用,因为Cloud Run 服务的零扩展能力。

我的服务允许内部和负载均衡器流量,并且必须对前端客户端公开可用,但它们还必须能够通过 Pub/Sub 私下相互通信。

有没有办法做到这一点?为使用 Pub/Sub 创建单独的私有服务感觉不自然。

【问题讨论】:

你能更清楚地知道什么叫什么吗?云运行是调用 PubSub 还是 Cloud Scheduler API?还是相反,PubSub 推送订阅和调用 Cloud Run 服务的 Cloud Scheduler? 我希望我的 Cloud Run 服务能够收听 Pub/Sub 订阅。所以 Pub/Sub 调用 Cloud Run。 【参考方案1】:

这是一个缺失的部分。您不能插入您的 VPC PubSub 推送订阅和 Cloud Scheduler(还有 Cloud Task、Cloud Build、Workflows,...)。几个月前我问过 Google Cloud,它应该很快就会被新的网络功能修复。至少在 2021 年!

因此,在您的情况下,如果您的 Cloud Run 服务可通过负载均衡器从公共互联网访问,您可以使用此公共端点调用您想要的服务路径,从而执行该过程。

如果您的 Cloud Run in 只能从 ingress=internal 访问,那么您现在不能。

【讨论】:

感谢您的回答。我的服务可以公开访问,但我想保护 Pub/Sub 端点。我想我现在会将自己的令牌附加到 Pub/Sub 消息中。 是的,您不能只使用 IAM 服务保护一个端点。它要么是整个服务,要么什么都没有。您还可以在服务前使用 API 网关,以便对 API 的每个路径进行更精细的控制。

以上是关于在公共 Cloud Run 服务上使用 Pub/Sub的主要内容,如果未能解决你的问题,请参考以下文章

如何对 GCP Cloud Run 上的联合 GraphQL 服务进行身份验证?

Terraform:Cloud Run 服务上的 Cloud Endpoints?

使用 OpenTelemetry 在 Google Cloud Run 上跟踪传播

如何在 React 中使用在 Google Cloud Run Dashboard 上声明的 ENV 变量

Cloud Run PubSub 高延迟

Google Cloud Run 身份验证服务到服务