【问题标题】:Using VPC connector in Cloud Run在 Cloud Run 中使用 VPC 连接器
【发布时间】:2021-11-24 23:06:03
【问题描述】:

关于在 Cloud-Run 中使用无服务器 vpc 连接器,我遇到了一个棘手的情况。该服务需要调用其他内部(例如只允许通过内部流量调用)云运行服务和一些外部服务/url。鉴于通过连接器进行路由的两个选项,即(1. 通过连接器仅将流量路由到私有 IPS)和(2. 通过连接器路由所有流量),我似乎不可能以这样的方式配置连接器使其正确解析外部和内部 URL。

使用第一个选项时,内部云运行服务的 URL 未正确解析,但外部的 URL 已正确解析。云运行服务没有静态 IP,因此不能选择使用“内部”IP。

选择第二个选项时,内部 URL 被正确解析,但外部 URL 不正确。

这种情况有解决办法吗?

【问题讨论】:

  • 你无法达到你想要的。此外,依靠静态公共 IP 不是一个好的设计,但我知道遗留/旧设计应用程序有时需要。

标签: google-cloud-platform


【解决方案1】:

如果您想同时访问内部和外部 URL,正确的选项是 “仅通过连接器将流量路由到私有 IPS”。 正如谷歌公共文档所述:“只有对 RFC 1918 和 RFC 6598 IP 地址范围或内部 DNS 名称的请求才会路由到您的 VPC 网络。所有其他请求都直接路由到互联网”。 [1]

如果您在选择此选项时无法访问内部 URL,很可能是您在 VPC 子网的防火墙级别阻止了它们。

要检查项目中的防火墙规则,您可以在 gcloud 控制台中运行以下命令:

gcloud compute firewall-rules list

[1]https://cloud.google.com/run/docs/configuring/connecting-vpc

【讨论】:

  • 防火墙规则似乎对 Cloud Run 没有影响。只有当我从只允许内部更改为允许服务 B 可以从服务 A 访问的所有流量时(表明防火墙与此无关),否则我会得到 403,我并不感到惊讶。当服务 A 未配置为通过 VPC 连接器路由所有流量并尝试通过其公共 URL 访问服务 B(对入口具有“仅允许内部流量”)时,服务 A 将不会获得内部 IP,并且服务 B 将接收来自服务 A 的请求并拒绝它,因为它不是内部的。
【解决方案2】:

VPC 无服务器连接的目的是提供从无服务器应用程序到内部 GCP VPC 资源的内部访问,如以下文档 [1] 中所述。

话虽如此,如果通过 Cloud Run 部署的应用程序需要 GCP 外部资源;应该由使用的图像本身的合成来处理,而不是由 VPC Serverless 连接来处理。

我可以从您的回复中得到的第二部分是您在 Cloud Run 中配置了多个服务并且需要在它们之间进行通信。

对于这一部分,我想指出,也许最好的方法而不是 VPC 无服务器连接是合并您的服务并将它们打包到一个 docker 文件中。

您可以在以下文档 [2] 中找到有关如何在容器中运行多个服务的示例。

一旦您创建了一个合并了服务的 docker 映像,您就可以将其存储在任何受支持的注册表中,并使用 Cloud Run 进行部署,如以下文档 [3] 中所述。

[1]https://cloud.google.com/vpc/docs/serverless-vpc-access

[2]https://docs.docker.com/config/containers/multi-service_container/

[3]https://cloud.google.com/run/docs/deploying

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2020-12-30
    • 2021-08-02
    • 2021-05-11
    • 2022-07-07
    • 2020-07-01
    • 2020-12-07
    • 2019-09-03
    • 2020-10-13
    相关资源
    最近更新 更多