【发布时间】:2020-05-12 22:46:51
【问题描述】:
我正在尝试通过运行 Squid 代理服务器的 Google Compute Engine 服务器 VM 实例代理从 Google App Engine 应用程序发出的出站 API 调用。
目标是所有 REST api 调用都来自静态 IP 地址,以便第 3 方 API 能够识别并允许通过其防火墙的调用。
我已阅读并遵循此帖子中的说明:
connect Google App Engine and Google Compute Engine
到目前为止,我已经做到了以下几点:
- 创建了一个 Google 云计算 VM 并成功为其分配了一个静态外部 IP 地址。
- 已成功创建无服务器 VPC 访问连接器(所有资源位于同一 GAE 区域)。
- 在我的 Google App Engine 项目(在 Node.js 上运行)中的 app.yaml 中添加了 vpc_access_connector 名称。
- 使用 gcloud beta 部署应用,API 调用针对代理服务器的内部 IP 地址,使用正确的 Squid 默认端口 (3128)。
- 从 GAE 应用程序发出请求时,我可以从服务器日志中看到正在尝试正确的 IP 地址和端口,但收到以下错误:“错误:无法建立隧道套接字,原因 = 连接 ECONNREFUSED [我的内部 IP 地址]:3128"
我也尝试过从云 shell 界面运行 curl 命令,但每次请求都会超时。
如果有人能帮助解决这个问题,我将非常感激。
【问题讨论】:
-
什么是 App Engine 环境?标准还是灵活?我建议您关注documentation 的相关部分,它使用
gcloud app deploy而不是gcloud beta app deploy。 -
@DanielOcando 抱歉,但我已经阅读了很多次,并且完全按照说明进行操作。在使用 gcloud beta 部署之前,我使用 gcloud 进行了部署,但没有任何区别。我现在创建了一个新的 vpc 连接器,使用 gcloud(非测试版)重新部署并创建了一个新的计算引擎 VM,看看我是否可以使用新的 vpc 连接器得到响应。我检查了 vpc 防火墙规则并确保端口对入口流量开放。如果我从 App Engine 卷曲到计算引擎 vm(+ 端口)的内部 IP 地址,它就会超时。
-
@DanielOcando - 另外,我使用的是标准环境。
-
我可以看到“ECONNREFUSED”的两个可能原因:1。 SQUID server inside the Compute Engine Proxy 配置错误。通过 SSH 连接到 VM 并运行
sudo sed -i 's:#\(acl localnet src [SERVERLESS_VPC_ACCESS_CONNECTOR_IP]/28.*\):\1:' /etc/squid/squid.conf以将您的无服务 VPC 访问连接器添加到 Squid's server ACL 然后 restart the server 以使更改生效。 -
2. VPC 网络配置错误。您是否添加了防火墙规则以允许端口 3128 上的流量?如果您使用的是default network,则以下command 应该可以工作:
gcloud compute firewall-rules create NAME --network default --allow tcp:3128(将 NAME 更改为您想要的防火墙规则名称)。
标签: google-app-engine google-compute-engine vpc