无法看到在实例的外部IP上运行的应用程序

时间:2017-07-22 23:16:07

标签: node.js deployment instance google-compute-engine

Google Compute Engine新手在这里。

我跟随书架教程:https://cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine

但遇到了问题。当我尝试使用我的外部IP http://[YOUR_INSTANCE_IP]:8080查看我的应用程序时

什么都没有出现。我已经尝试过一次又一次地运行教程,但仍然存在同样的问题。

编辑:

我的防火墙规则:http://i.imgur.com/gHyvtie.png

我的VM实例: http://i.imgur.com/mDkkFRW.png

显示正确网络标记的VM实例: http://i.imgur.com/NRICIGl.png

在我的网络浏览器中转到http://35.189.73.115:8080/仍然无法显示任何内容。说"这个页面没有工作"

1 个答案:

答案 0 :(得分:1)

TL; DR - 您很可能缺少防火墙规则,以允许传入流量到您的实例上的端口8080.

Default Firewall rules

默认情况下,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。

PS:这些也是the steps in the tutorial you linked的一部分。

# Add the 'http-server' tag while creating the VM
gcloud compute instances create my-app-instance \
    --image=debian-8 \
    --machine-type=g1-small \
    --scopes userinfo-email,cloud-platform \
    --metadata-from-file startup-script=gce/startup-script.sh \
    --zone us-central1-f \
    --tags http-server

# Add firewall rules to allow ingress tcp:8080 to VMs with tag 'http-server'
gcloud compute firewall-rules create default-allow-http-8080 \
    --allow tcp:8080 \
    --source-ranges 0.0.0.0/0 \
    --target-tags http-server \
    --description "Allow port 8080 access to http-server"