我目前正在为应用程序部署构建云环境,并遇到通过HTTP / S连接到正在运行的Node / Express REST API服务器的问题。我使用GCE作为我的VM提供程序,并且首先尝试从我的个人计算机上测试API服务。我现在想尽可能避免使用Docker Compose,因为在习惯于Docker之后,我想构建一个Kubernetes部署。
另外,我的VM防火墙设置确实允许HTTP和HTTPS请求进入计算机。
我已经能够使用虚拟机的外部IP SSH进入实例,并设置了一个正在运行的docker容器。然后,我尝试使用XX.XXX.XX.XXX:81:81上的运行命令来发布相同的端口443和81。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf3f315dd947 repo/dev-api:latest "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:81->81/tcp, 443/tcp api
我想在此之后立即进行HTTPS设置,但希望首先整理一下该HTTP。我的服务器正常运行,并且在HTTPS的端口443和HTTP的端口81上都进行侦听(端口80使我的VM完全与SSH断开连接,但这是另一个问题的主题)。但是,使用我的浏览器通过https://或http://的任意组合,直接通过端口443或81连接到外部IP时,仍然出现“无法访问此站点”错误。
我还尝试过ping通VM-它可以直接ping通外部IP,但不能使用http://附加到IP。
非常感谢您的帮助-谢谢您的宝贵时间。
您的问题是端口81和443上的流量无法到达您的VM。
您必须检查两个防火墙。
首先检查GCP防火墙,查看是否存在允许端口81和443上的incominig通信的适当规则。
一种是VM防火墙。我有一个有根据的猜测,它是基于Linux的。默认情况下,大多数linux系统不会阻止任何传入流量。
如果不是,则可以使用gcloud compute创建一个--project = my-proj-name防火墙规则,创建test-rule1 --direction = INGRESS --priority = 1000 --network = default --action = ALLOW- rules = tcp:81,tcp:443 --source-ranges = 0.0.0.0 / 0 --target-tags = docker-test-vm(您必须将docker-test-vm网络标签添加到您的VM中才能正常工作)。
如果仍然无法连接,请检查虚拟机的防火墙。我认为它是基于Linux的。
为了验证这一点运行以下命令:sudo iptables -L
; 您应该会看到以下内容:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这是默认的防火墙配置,这意味着允许所有通信(打开和关闭)。
为了进一步验证这一点,您可以运行sudo netstat -tulpn | grep LISTEN
以获取打开端口的列表(列表中应包含81和443)。
如果没有,请检查您的服务是否正常运行并在给定端口上侦听。如果没有尝试重新启动它,然后重复最后一步。
您可以看一下有关故障排除连通性的类似答案:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句