在谷歌云虚拟机上公开端口

stk*_*flw 1 google-cloud-platform

我在谷歌云上有两个项目。第一个已在 15 小时前设置好并且工作正常,端口 8080 已正确公开,我可以访问它。

现在我正在尝试对另一个项目做完全相同的事情。我使用相同的配置在其中创建了相同的 vm 实例,并使用 ssh 连接输入了相同的命令。但我无法将应用程序连接到此服务器。

我试图在第一个项目中创建另一个 vm 实例并且它可以工作,但是无论我在第二个项目中创建什么 - 我都无法访问它。

我假设项目配置有问题,因此没有提供有关 VM 内容的详细信息。

Tux*_*ude 5

TL;DR - 仔细检查并比较两个项目中的防火墙规则。您很可能缺少防火墙规则,以允许传入流量8080在不工作的项目中移植到您的实例上,而另一个项目配置了这些规则。

默认防火墙规则

默认情况下,Google Compute Engine 防火墙会阻止所有传入虚拟机的流量(即传入网络流量)。如果您的 VM 是在默认网络上创建的(通常是这种情况),则允许使用很少的端口,例如 22 ( ssh)、3389 ( RDP)。

默认的防火墙规则在此描述

为入口打开端口

进入防火墙规则在这里详细描述

推荐的方法是创建一个防火墙规则,允许端口上的虚拟机(包含您选择的特定标签)的传入流量8080。然后,您可以仅将此标记关联到您希望允许进入的 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
Run Code Online (Sandbox Code Playgroud)

这是另一个堆栈溢出答案,它会引导您了解如何使用 Cloud Console Web UI(除了gcloud)允许特定端口上的入口流量进入您的虚拟机。

操作系统级防火墙规则

由于您没有提到您使用的是任何公共 Google Compute Engine 映像容器优化的操作系统映像还是您选择的自定义映像,我还想提一下,即使您配置 GCE 防火墙规则以允许传入流量到达您的 VM,您的操作系统级防火墙仍然可以很好地拒绝流量。

Google 的 Container-Optimized OS 映像启用了此功能,它会阻止除端口22(SSH)之外的所有入口端口。