使用外部IP连接到在Cloud GCE VM上运行的Docker容器中的HTTPS服务器

莫谢克

我目前正在为应用程序部署构建云环境,并遇到通过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。

非常感谢您的帮助-谢谢您的宝贵时间。

Wojtek_B

您的问题是端口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   

这是默认的防火墙配置,这意味着允许所有通信(打开和关闭)。

您可以在此处了解更多信息iptables

为了进一步验证这一点,您可以运行sudo netstat -tulpn | grep LISTEN以获取打开端口的列表(列表中应包含81和443)。

如果没有,请检查您的服务是否正常运行并在给定端口上侦听。如果没有尝试重新启动它,然后重复最后一步。

您可以看一下有关故障排除连通性的类似答案:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GCE上的Python:连接失败,因为连接的主机无法响应

如何从主机连接到在Docker容器中运行的mysql服务器?

无法连接到在本地Docker容器中运行的Go GRPC服务器

GCE与LAMP VS GCE与Cloud SQL

什么会阻止在Docker容器中运行的代码连接到单独服务器上的数据库?

无法从外部连接到运行CherryPy服务器的Docker容器

无法连接到在Docker容器中运行的服务器(适用于Mac的Docker)

在GCE Micro(Debian)实例上安装google-cloud-sdk

通过私有IP连接到GCE Cloudsql实例

欧洲的GCE VM具有美国IP

如何从没有外部IP的GCE VM中读取存储分区?

在GCE VM上的Docker容器中的Node中编写的GRPC服务器-错误14

如何使用docker在Heroku上运行https服务器?

GCE上的Hadoop实例

无法连接到GCE实例

从应用程序引擎连接在GCE上运行的Postgresql

当我尝试使用外部IP连接到服务器时Java套接字超时

如何连接到在Docker容器中运行的服务器?

在ubuntu服务器上运行的docker容器上没有互联网连接

连接到 gce 实例并运行命令

无法使用 SSH 连接到 VM (GCE)

连接到在 windows docker 容器中运行的服务器

在 ansible playbook 中禁用 GCE vm 的公共 ip

无法从 GKE 连接到 GCE

通过无服务器 VPC 连接器向 GCE 发出 GAE http 请求

将 Google App Engine 连接到 GCE 上的 PostgreSQL 数据库

如何使用内部 IP 从 GCE 连接到 GKE 服务

无法使用外部 IP 连接到 kubernetes 服务

无法连接到运行 MySQL 服务器的 Docker 容器