Google应用引擎TCP连接失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google应用引擎TCP连接失败相关的知识,希望对你有一定的参考价值。

部署到谷歌应用引擎的Spring启动应用程序和对端点的请求正确地响应了预期的硬编码文本。除了暴露的默认端口8080之外,还暴露了另一个TCP:8595,其中数据通过跟踪设备发布到该端口。

问题是,当我测试与telnet projectid.appspot.com 8595获得tcp连接时,我得到了这个响应Connecting To projectid.appspot.com...Could not open connection to the host, on port 8595: Connect failed,在本地认为连接没有失败。

应用程序引擎中托管的应用程序如何公开端口?

免责声明:我是App Engine和GCP的新手

答案

正如它在docs中所述,您应该能够在app.yaml中设置端口转发,然后通过防火墙规则公开它。

1.)端口转发

network:
  forwarded_ports:
    - 2222/tcp

调试思路:使用AppEngine Flex,您可以通过SSH进入实例进行进一步调试(App Engine> Instances,实例旁边的SSH按钮)。

登录后,您应该能够运行此docker命令以查看暴露的端口(在我的情况下,我在我的app.yaml中暴露了8081):

$ sudo docker port gaeapp
8080/tcp -> 172.17.0.1:8080
8081/tcp -> 0.0.0.0:8081

您甚至可以检查它是否侦听(在我的情况下,它是正确回复的HTTP服务404):

curl localhost:8081
{"timestamp":1519837414455,"status":404,"error":"Not Found","message":"No message available","path":"/"}

(对于telnet,你需要用sudo apt-get update && sudo apt-get install -y telnet安装它)

如果显示您的端口,则下一步是仔细检查防火墙设置。

2.)防火墙设置

gcloud compute firewall-rules create myrule --allow=tcp:8595 --source-ranges=0.0.0.0/0

但是,这只会让您直接通过VM实例IP访问您的应用程序! (您可以在控制台中找到您的IP或列出您的实例gcloud compute instances list

请参阅docs中的forwarded_ports说明

forwarded_ports可选。您可以将实例(HOST_PORT)中的端口转发到Docker容器(CONTAINER_PORT)。如果仅指定PORT,则App Engine会假定它与主机和容器上的端口相同。默认情况下,转发TCP和UDP流量。流量必须直接发送到目标实例,而不是通过appspot.com域或您的自定义域。

以上是关于Google应用引擎TCP连接失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 部署 Google 应用引擎失败

TCP 连接失败

来自应用引擎的 google cloud sql 允许的最大并发连接数

Quarkus 部署到 Google Cloud App 引擎失败

加载地图失败。在片段上联系 Google 服务器时出错

与 Google SQL 的 TCP 连接给出 OperationalError(来自 GKE 中的容器化应用程序)