【问题标题】:Communication between Google App Engine Application and Google Cloud Engine InstanceGoogle App Engine 应用程序和 Google Cloud Engine 实例之间的通信
【发布时间】:2025-12-10 08:30:02
【问题描述】:

查看 GCE 实例,您可以看到 IP 地址有两种主要类型(内部一种和外部一种)。

现在,如果我有一个 Google App Engine 应用程序(flex env)和一个在 Google Compute Engine 实例中运行的后端。两个应用程序都在同一个 GCP 项目中运行。应用引擎应用程序是否可以使用其内部 IP 地址请求 GCE 后端应用程序?我猜想,在同一个项目中运行的应用程序也在同一个 VPC 中运行。

由于我使用的是 GAE flex 环境,我可以对 GAE 实例进行 ssh,并且通过对 GCE 实例的内部 IP 地址的 curl 请求,我得到了回复,但是当我尝试在应用程序(例如 axios 请求)它不起作用,我没有得到任何数据,我可以在 GCE 实例中看到请求没有转发到服务器。

知道如何使用 GCE 实例的内部 IP 地址与运行在同一项目中的 GAE 应用程序通信吗?

【问题讨论】:

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


    【解决方案1】:

    您可以将 GAE Flex 实例启动到与 GCE 实例相同的网络/子网中,从而通过内部 IP 进行通信。这是通过在app.yaml 文件中设置network: 部分来完成的。有关更多信息,请参阅网络设置上的 this documentation

    【讨论】:

    • 但据我所知(如果我错了请纠正我)当您不手动指定此选项/配置时,将使用的网络名称是整体的默认名称项目,这是默认的,因此我假设这两个项目都在同一个网络接口上运行。
    • 如果不指定网络名称,实例将分配给项目的默认网络(名称为 default)。前提是 GAE flex 和 GCE 实例都在默认 VPC 网络下运行到同一个项目中。您可以找到更多详细信息here
    • @RahiR 我已经创建了我的自定义网络,并且它们都在同一个网络上,因此网络没有问题。无论如何,为了实现我想到的架构,我遇到了多个问题,最终它奏效了。我的主要问题在于端口,我在构建防火墙规则时使用标签名称的方式是错误的,这就是我无法连接到我的实例的原因。
    【解决方案2】:

    好吧,只是回答我自己的问题,经过大量尝试和搜索,与内部服务通信的最佳方式是创建一个内部负载均衡器(tcp),因为它没有任何意义(对于我的用例至少)要连接到一个实例,毕竟我希望我的应用程序能够扩展。所以我做了什么,我在内部实例前面创建了一个 TCP 负载均衡器(它们无论如何都作为实例组运行),然后我得到一个静态内部 ip 并将其分配给内部负载均衡器,在 GAE 中使用该静态 ip 和它工作。

    我根据实例组模板确保防火墙规则正确无误。最终一切都奏效了。

    【讨论】:

      最近更新 更多