【问题标题】:Google app engine TCP connection FailedGoogle 应用引擎 TCP 连接失败
【发布时间】:2018-02-26 16:02:55
【问题描述】:

部署到谷歌应用引擎的 Spring Boot 应用程序和对端点的请求按预期正确响应硬编码文本。除了暴露的默认端口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 的新手

【问题讨论】:

  • 是的,我实际上一步一步地遵循了这些说明
  • 您的应用程序是否严格遵循该端口上的 telnet 协议?如果不是,这可能解释了 telnet 故障,即使该端口可以以其他方式访问。您是否在应用日志中看到传入的请求?
  • telnet 协议是什么意思?
  • en.wikipedia.org/wiki/Telnet。侦听端口的服务器需要遵循该协议才能建立到它的 telnet 连接。但是,如果服务器不是 telnet 服务器(即不遵循该协议)无法通过 telnet 连接并不一定意味着服务器无法正常工作或端口未正确转发,这可能只是意味着您正在尝试使用它不正确。尝试测试这样的服务器,因为它通常打算使用,而不是通过 telnet。

标签: java spring-boot tcp google-cloud-platform app-engine-flexible


【解决方案1】:

正如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

你甚至可以检查它是否监听(在我的例子中,它是一个正确回复 404 的 HTTP 服务):

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

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

查看docs中对forwarded_ports的描述

forwarded_ports 可选。您可以从您的实例转发端口 (HOST_PORT) 到 Docker 容器 (CONTAINER_PORT)。如果你只 指定一个端口,然后 App Engine 假定它是同一个端口 主机和容器。默认情况下,TCP 和 UDP 流量都是 转发。 流量必须直接发送到目标实例 而不是通过 appspot.com 域或您的自定义域。

【讨论】:

  • 如何才能让某人与网络外的该端口通信?
猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2015-02-11
相关资源
最近更新 更多