无法连接到在 Google Compute Engine 虚拟机实例上运行的 HTTP 服务

Har*_*i N 5 connectivity google-compute-engine

我有一个在 f1-micro 实例上运行 COS 版本“cos-dev-61-9733-0-0”的 VM 实例。我已经配置了一个外部 IP 地址 146.xxx.xxx.106 并分配给这个实例。我正在尝试从我的本地工作站测试到此实例的 HTTP 连接,但到目前为止没有成功。

我在“防火墙”下启用了“允许 HTTP 流量”和“允许 HTTPS 流量”设置,即使它们在我保存后没有显示选中的框。然而,网络标签的值为“http-server, https-server”,如下所示:

在此处输入图片说明

我还确认“网络 > 防火墙设置”有一个默认的 HTTP 规则,如下所示:

在此处输入图片说明

我发现这里报告了一个类似的问题,但并没有帮助解决我的问题:无法访问 Google Cloud Compute Instance External IP任何有关我缺少的其他设置的建议将不胜感激。我查找了操作系统级别的防火墙设置,但找不到足够的 Chromium OS 文档。

以下是我遵循的步骤:

在 GCE 实例上:

$ sudo python -m SimpleHTTPServer 80

在 0.0.0.0 端口 80 上提供 HTTP ...

$ sudo netstat -antup

活动的 Internet 连接(服务器和已建立)

Proto Recv-Q Send-Q 本地地址外地址
状态PID/程序名称

tcp 0 0 0.0.0.0:22 0.0.0.0:*
听 638/sshd

tcp 0 0 0.0.0.0:5355 0.0.0.0:*
LISTEN 613/systemd-resolve

tcp 0 0 0.0.0.0:80 0.0.0.0:*
听 12750/python2.7

运行 curl 命令并得到以下响应:

$ curl http://localhost:80 / 的目录列表

目录列表 /


  • .bash_history
  • .bash_logout
  • .bash_profile
  • .bashrc
  • .泊坞窗/
  • .ssh/
  • .viminfo
  • 应用/

从本地工作站:

  1. Ping 外部 IP 地址并收到响应:

$ ping 146.xxx.xxx.106 PING 146.xxx.xxx.106 (146.xxx.xxx.106) 56(84) 字节数据。来自 146.xxx.xxx.106 的 64 字节:icmp_seq=1 ttl=63 time=1131 ms ^C --- 146.xxx.xxx.106 ping 统计 --- 3 个数据包传输,3 个接收,0% 数据包丢失,时间 2007ms

  1. 成功通过 SSH 连接到实例:

$ ssh 146.xxx.xxx.106 debianuser@cos-dev-61-dockervm1 ~ $

  1. 运行“nmap”命令,但它只显示 SSH 端口 22 打开:

$ nmap -Pn 146.xxx.xxx.106

从2017-07-20 11:35 CDT Nmap 扫描报告 106.xxx.xxx.146.bc.googleusercontent.com (146.xxx.xxx.106)开始 Nmap 6.47 ( http://nmap.org ) 主机是向上(0.17 秒延迟)。未显示:999 个过滤端口 PORT STATE SERVICE 22/tcp open ssh

Nmap 完成:在 86.74 秒内扫描了 1 个 IP 地址(1 个主机启动)

Tux*_*ude 5

所述集装箱优化OS图像在操作系统级别已启用防火墙来阻止所有传入通信(除ssh)。默认情况下只允许传出流量。

除了配置 Google Compute Engine 防火墙规则以允许传入 VM 的流量之外,您还需要确保在 VM 中运行的操作系统也允许它。

这在Container-Optimized OS文档中提到

配置主机防火墙

默认情况下,Container-Optimized OS 主机防火墙仅允许传出连接,并仅接受通过 SSH 服务传入的连接。要接受 Container-Optimized OS 实例上的传入连接,您必须打开您的服务正在侦听的端口。

例如,要接受来自同一 Compute Engine 项目中其他实例的连接,请在您的开发工作站和 Container-Optimized OS 实例上运行以下命令:

# On your workstation:
SUBNETWORK_URI=$(gcloud compute instances describe ${COS_INSTANCE_NAME} | grep -w 'subnetwork:' | awk '{ print $2 }')
SUBNET_PREFIX=$(gcloud compute networks subnets describe ${SUBNETWORK_URI} | grep -w 'ipCidrRange:' | awk '{ print $2 }')

# On your Container-Optimized OS instance:
sudo iptables -w -A INPUT -p tcp -s ${SUBNET_PREFIX} -j ACCEPT
sudo iptables -w -A INPUT -p udp -s ${SUBNET_PREFIX} -j ACCEPT
 As another example, if you need to accept HTTP (port 80) connections from any source IP address, run the following commands on
Run Code Online (Sandbox Code Playgroud)

您的 Container-Optimzied OS 实例:

# On your Container-Optimized OS instance:
sudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

一般情况下,建议您systemd通过将主机防火墙配置为 服务cloud-init