google-cloud-platform - 为什么 GCP 不允许虚拟机内的外部公共(public) IP

标签 google-cloud-platform static-ip-address

我一直在尝试在 GCP 的服务器上设置一些软件,并分配一个公共(public)静态 IP。但我没有通过 ifconfigip addr 在虚拟机内部看到它。我知道有no way让 IP 显示在虚拟机内部,并且存在从 NAT 到公共(public) IP 的一对一映射,但我不明白的是,为什么。而this question要求基本相同,答案并没有真正清楚地回答为什么部分。

我偶尔会在 Windows PC 上运行 VM,有时,我会桥接适配器,以便 VM 在我的本地网络上获得 IP,所以我知道这是可能的(除非我在这里遗漏了某些内容)。不过IBM云似乎有这个功能。

所以,我的问题是,这可能是不允许或尚未实现的原因是什么以及为什么?它解决或简化了哪些问题?为什么我不能只使用 ifconfigip addr 查看 IP(我知道我不能导致 IP 未分配给接口(interface),我的意思是说为什么没有一个)?作为一名初学者,我认为该功能是人们“期望”的,因此我想知道其背后的技术推理。

谢谢!

最佳答案

Google 需要解析您已创建的计算引擎实例的 IP 地址。正如 @esqew 提到的,它使用 NAT 将公共(public) IP 地址转换为与您的实例相对应的 Google 内部私有(private)地址。

您的实例不位于公共(public) Internet 上,并且无法从公共(public) Internet 直接寻址。相反,公共(public) IP 地址将流量发送到 Google 前端,然后 Google 服务解析该地址。尽管 IP 地址可能会长时间绑定(bind)到实例,但这些地址会被多次重复使用。

其他计算机(甚至是您项目中的计算机)可能会使用公共(public) IP 地址来解析您的实例但是此流量将路由到 Google 的解析器,并通过网络发送回您的实例。使用实例的内部 DNS 或内部 IP 地址可能 (!) 更有效。

在这些情况下,您的实例都不需要配置此 IP 地址。该实例需要知道如何路由流量,并且连接到 Internet 的所有其他设备都需要能够访问您的实例,仅此而已。

您可以使用元数据服务确定实例的公共(public) IP 地址。从实例来看:

METADATA="http://metadata.google.internal/computeMetadata/v1"

# External IP for interface: 0 access-config: 0
curl --request GET \
--header "Metadata-Flavor: Google" \
${METADATA}/instance/network-interfaces/0/access-configs/0/external-ip

# Internal IP
curl --request GET \
--header "Metadata-Flavor: Google" \
${METADATA}/instance/network-interfaces/0/ip

关于google-cloud-platform - 为什么 GCP 不允许虚拟机内的外部公共(public) IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64033536/

相关文章:

amazon-web-services - AWS 无法将弹性 IP 分配给网络接口(interface)

linux - Django 无法分配给谷歌计算引擎上的 ip 地址

Firebase Cloud Functions 在实时数据库 onCreate 上获取数据

ubuntu - 将数据集从我的 PC 上传到 Google Cloud Platform 上的虚拟机实例的最佳方式

node.js - 部署到 App Engine 会产生 gulp 错误?

javascript - Google Cloud 函数快速入门

python - 为什么我使用此 GCP App Engine 应用程序没有收到 DeadlineExceededError 错误?

linux - 在/etc/sysconfig/network-scripts 中找不到 ifcfg-enp0s3?

linux - 静态IP和自动wifi连接的网络配置

django - 外部访问本地主机?