使用外部 IP 连接到 Cloud GCE VM 上 Docker 容器 运行 中的 HTTPS 服务器
Connecting to HTTPS server in Docker container running on Cloud GCE VM with external IP
我目前正在为应用程序部署构建云环境,运行遇到连接到 运行ning Node/Express REST [=28] 的问题=] 服务器通过 HTTP/S。我正在使用 GCE 作为我的 VM 提供者,开始时我只是想从我的个人机器上测试 API 服务。如果可能的话,我现在想避免 Docker Compose,因为我想在习惯 Docker.
之后构建一个 Kubernetes 部署
此外,我的 VM 防火墙设置允许 HTTP 和 HTTPS 请求进入机器。
我已经能够使用 VM 的外部 IP 通过 SSH 连接到我的实例,并设置了一个 运行ning 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。我的服务器 运行 正确并在端口 443 上侦听 HTTPS 和 81 端口(端口 80 导致我的 VM 完全断开与 SSH 的连接,但这是另一个问题的主题)。但是,使用我的浏览器直接连接到端口 443 或 81 上的外部 IP,使用 https:// 或 http:// 的任意组合,我仍然收到“无法访问此站点”错误。
我也试过对 VM 执行 ping 操作 - 直接 ping 外部 IP 效果很好,但在 IP 前面加上 http:// 时效果不佳。
非常感谢您对此提供的帮助 - 感谢您抽出宝贵时间。
您的问题是端口 81 和 443 上的流量无法到达您的虚拟机。
你必须检查两个防火墙。
首先检查 GCP 防火墙,看看是否存在允许端口 81 和 443 上的传入流量的正确规则。
一个是VM防火墙。我有根据地猜测它是基于 Linux 的。默认情况下大多数 linux 系统 don't block any incoming traffic.
如果没有,您可以使用 gcloud compute 创建一个 --project=my-proj-name firewall-rules create 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 以使其正常工作)。
如果仍然无法连接,请检查 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
这是默认的防火墙配置,这意味着允许所有流量(进出)。
您可以阅读more about iptables
here。
要进一步验证这一点,您可以 运行 sudo netstat -tulpn | grep LISTEN
获取开放端口列表(81 和 443 应该在列表中)。
如果他们不检查您的服务是否 运行 正确并在给定端口上侦听。如果没有,请尝试重新启动它并重复最后一步。
你可以看看我关于排除连接问题的类似答案:
- Unable to connect to gcloud
- Google Cloud Platform Why if I declare a firewall rule it doesn't work?
我目前正在为应用程序部署构建云环境,运行遇到连接到 运行ning Node/Express REST [=28] 的问题=] 服务器通过 HTTP/S。我正在使用 GCE 作为我的 VM 提供者,开始时我只是想从我的个人机器上测试 API 服务。如果可能的话,我现在想避免 Docker Compose,因为我想在习惯 Docker.
之后构建一个 Kubernetes 部署此外,我的 VM 防火墙设置允许 HTTP 和 HTTPS 请求进入机器。
我已经能够使用 VM 的外部 IP 通过 SSH 连接到我的实例,并设置了一个 运行ning docker 容器。然后我尝试在 XX.XXX.XX.XXX:81:81.
使用 运行 命令发布相同的端口 443 和 81CONTAINER 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。我的服务器 运行 正确并在端口 443 上侦听 HTTPS 和 81 端口(端口 80 导致我的 VM 完全断开与 SSH 的连接,但这是另一个问题的主题)。但是,使用我的浏览器直接连接到端口 443 或 81 上的外部 IP,使用 https:// 或 http:// 的任意组合,我仍然收到“无法访问此站点”错误。
我也试过对 VM 执行 ping 操作 - 直接 ping 外部 IP 效果很好,但在 IP 前面加上 http:// 时效果不佳。
非常感谢您对此提供的帮助 - 感谢您抽出宝贵时间。
您的问题是端口 81 和 443 上的流量无法到达您的虚拟机。
你必须检查两个防火墙。
首先检查 GCP 防火墙,看看是否存在允许端口 81 和 443 上的传入流量的正确规则。
一个是VM防火墙。我有根据地猜测它是基于 Linux 的。默认情况下大多数 linux 系统 don't block any incoming traffic.
如果没有,您可以使用 gcloud compute 创建一个 --project=my-proj-name firewall-rules create 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 以使其正常工作)。
如果仍然无法连接,请检查 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
这是默认的防火墙配置,这意味着允许所有流量(进出)。
您可以阅读more about iptables
here。
要进一步验证这一点,您可以 运行 sudo netstat -tulpn | grep LISTEN
获取开放端口列表(81 和 443 应该在列表中)。
如果他们不检查您的服务是否 运行 正确并在给定端口上侦听。如果没有,请尝试重新启动它并重复最后一步。
你可以看看我关于排除连接问题的类似答案:
- Unable to connect to gcloud
- Google Cloud Platform Why if I declare a firewall rule it doesn't work?