我在谷歌云上有两个项目。第一个已经建立了15个小时前工作正常,端口8080正确暴露,我可以访问它。
现在,我正试图与另一个项目完全相同。我使用相同的配置在那里创建了相同的vm实例,使用ssh连接输入相同的命令。但我无法将应用程序连接到此服务器。
我试图在第一个项目上创建另一个vm实例并且它可以工作,但无论我在第二个项目上创建什么 - 我都无法访问它。
我认为,项目配置有问题,因此没有提供有关VM内容的详细信息。
答案 0 :(得分:3)
TL; DR - 仔细检查并比较两个项目中的防火墙规则。您很可能缺少防火墙规则,以允许传入流量到项目中不能正常工作的实例上的端口8080
,而另一个项目则配置了这些规则。
默认情况下,Google Compute Engine防火墙会阻止所有入口流量(即传入网络流量)到您的虚拟机。如果您的虚拟机是在默认网络上创建的(通常是这种情况),则只允许使用22(ssh
),3389(RDP
)等端口。
default firewall rules are described here。
ingress firewall rules are described in detail here。
建议的方法是创建防火墙规则,允许在端口8080
上传入到您的VM(包含您选择的特定标记)的流量。然后,您可以将此标记仅关联到您希望允许进入的VM 8080
。
使用gcloud
执行此操作的步骤:
# Create a new firewall rule that allows INGRESS tcp:8080 with VMs containing tag 'allow-tcp-8080'
gcloud compute firewall-rules create rule-allow-tcp-8080 --source-ranges 0.0.0.0/0 --target-tags allow-tcp-8080 --allow tcp:8080
# Add the 'allow-tcp-8080' tag to a VM named VM_NAME
gcloud compute instances add-tags VM_NAME --tags allow-tcp-8080
# If you want to list all the GCE firewall rules
gcloud compute firewall-rules list
以下是another stack overflow answer,其中介绍了如何使用Cloud Console Web UI(除gcloud
之外)允许特定端口上的入口流量到您的VM。
由于您没有提及您是否正在使用任何public Google Compute Engine images或Container-Optimized OS图片或您选择的自定义图片,我还想提及即使您配置GCE防火墙允许传入流量到达您的VM的规则,您的操作系统级防火墙仍然可以很好地拒绝流量。
Google's Container-Optimized OS images have this feature turned on,它阻止除端口22
(SSH)之外的所有入口端口。