无法绑定到 google 计算引擎 VM 实例的外部 IP 地址

Cannot bind to external IP address of google compute engine VM instance

我正在尝试使用 python 在我的笔记本电脑和我的 google 计算引擎实例之间测试一个简单的客户端-服务器设置。该设置在 2 台笔记本电脑之间运行良好。但是当我 运行 我的 VM 实例中的服务器程序调用绑定命令后出现以下错误:“socket.error: [Errno 99] 无法分配请求的地址”

我正在尝试绑定到外部 IP 地址,以便我可以从外部设备接收数据。

这是代码片段

import socket

s = socket.socket()

port = 12345

s.bind(('xxx.xxx.xxx.xxx',port))

谁能告诉我为什么我不能绑定到外部IP地址。我试图在 Google 的文档和在线搜索中找到答案,但无济于事。我对此很陌生,甚至不知道 post 的哪些信息有助于故障排除。提前致谢。

这是我的防火墙规则

Google云的网络有区别internal and external IP addresses。特别是,GCE VM 实际上不会有与外部可见 IP 地址的接口——云基础设施在实例外部处理转换。

您需要为您的实例绑定到内部 IP 地址,GCP 的网络基础设施将为您处理路由,前提是您的 VPC firewall configuration.

允许此类路由

注意:如前所述,您当前的防火墙配置没有允许进入 12345 端口的规则,您需要添加此规则并确保它 applies to this particular instance(通过应用于实例的目标标签,或通过将规则应用于网络中的所有目标)

您也可以考虑使用 0.0.0.0 (or INADDR_ANY) which in python is just the empty string。所以这也适用于您(同样,假设防火墙配置正确):

import socket

s = socket.socket()
port = 12345
s.bind(('',port))