【问题标题】:Communication between Google App Engine and Google Cloud RunGoogle App Engine 和 Google Cloud Run 之间的通信
【发布时间】:2021-12-22 10:18:36
【问题描述】:

我目前有一个 ReactJS 前端作为服务部署在 Google App Engine (GAE) 上,而我的 Flask 后端 API 服务部署在 Google Cloud Run 上。

我做出这些选择是为了在有合理限制的同时保持免费等级。由于我的项目处于测试阶段,我刚刚使用 Cloud Run URL 从前端发出所有请求。但是,现在是时候让我的 Cloud Run API 实例私有化,并且只允许来自 GAE 前端的请求得到处理。

我在 apppot 服务帐户上尝试了一些 Cloud Run Invoker 权限,但无法使其正常工作。我的前端不断收到 403 禁止错误。我不确定如何继续,因为没有关于连接 GAE 和 Cloud Run 的文档。

【问题讨论】:

  • 不是您问题的直接答案,但我很好奇 - 您是说如果您在 GAE 中实现相同的云运行代码,您会冒违反 GAE 中免费层的风险吗?
  • 是的,我想是的。我需要 1GB,如果我使用 B4 实例,这意味着我每天只有 4.5 小时的计算时间。我的应用程序非常互动,参与度可能比这更长。告诉我我是否错误地解释了 GAE 的实例时间
  • 1GB 内存还是什么?另外,您使用的是哪个版本的 GAE - Standard 还是 Flex?当您的意思是您的前端部署到 GAE 时,您的意思是您本质上拥有一个托管在 GAE 上的静态站点,并且所有对后端的请求都是通过 Javascript 或 PHP 完成的,并且会转到您在 Cloud Run 上的 url?
  • 您的问题需要更多详细信息。您的问题提到了 App Engine -> Cloud Run。显示产生错误的其他代码。显示确切的错误。详细信息将帮助您找到解决方案。
  • @NoCommandLine 的最新评论直击问题的关键:前端调用后端吗?还是前端服务静态文件在您的浏览器中解释和运行,而您的浏览器(静态网站)执行对后端的调用?对架构和通信流程的深入理解对于回答您的问题至关重要!

标签: google-app-engine google-cloud-platform google-cloud-run


【解决方案1】:

文档here 谈到了生成静态网站。您说您正在从 App Engine 连接到 Cloud Run,但您似乎在 App Engine 上托管您的静态网站。这样,连接就不会来自 App Engine,而是来自最终用户的浏览器。

您需要解除对 Cloud Run 服务的访问限制。这是为服务到服务的身份验证而设计的,不适用于最终用户身份验证,尤其是对于公共站点或具有大量用户的站点。

还有一个名为Firebase Auth 的产品可能会帮助您解决这种情况。

【讨论】:

  • 问题是我无法在 ReactJS 环境中设置 GOOGLE_APPLICATION_CREDENTIALS(因为所有环境变量都需要以 REACT_APP 开头)。无论如何,将服务帐户放在环境变量中或前端的 JSON 文件中只会将其暴露给查看开发者控制台的任何人,所以我看不出这将是一个好的解决方案吗?
  • 嘿,让我们知道您更喜欢哪个 App Engine 运行时和 HTTP 客户端库?
  • App Engine F1 实例(未启用 flex)。 Http客户端我目前只是使用fetch,但我没有偏好,如果使用其他东西更容易,我就去探索它。
  • 文档here 谈到了生成静态网站。您说您正在从 App Engine 连接到 Cloud Run,但您似乎在 App Engine 上托管您的静态网站。这样,连接就不会来自 App Engine,而是来自最终用户的浏览器。
  • 您需要解除对 Cloud Run 服务的访问限制。这是为服务到服务的身份验证而设计的,不适合最终用户的身份验证,尤其是对于公共站点或具有大量用户的站点。还有另一种名为 Firebase Auth 的产品,它可能会帮助您解决这种情况。
【解决方案2】:

根据您对直接调用 Cloud Run 的前端静态页面的描述。 Cloud Run 中有 2 个关键标志将在此处应用
--ingress= - 如果您指定了 internalinternal-and-cloud-load-balancing,它将永远无法工作
--no-allow-unauthenticated - 如果您指定了这个,每个用户都需要被授予他们自己的访问权限并提供他们自己的不记名令牌
按照预期的方式使用 App Engine 并直接使用 App Engine 的后端是一种更好的设计

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2019-09-01
    • 2021-10-26
    • 2020-08-07
    • 2014-10-10
    • 2021-05-26
    • 2019-09-17
    • 2015-01-16
    • 2017-12-07
    相关资源
    最近更新 更多