为什么GCP不允许VM内使用外部公共IP

时间:2020-09-23 17:44:52

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

我一直在尝试通过GCP在服务器上设置一些软件,并分配了一个公共静态IP。但是我没有通过ifconfigip addr在VM内部看到它。我知道有no way可以在VM内显示IP,并且从NAT到公共IP有一对一的映射,但是我不明白,为什么? >。尽管this question提出的要求基本相同,但答案并没有真正明确回答为什么部分。

我有时会在Windows PC上运行VM,有时会桥接适配器,以便VM在本地网络上获得IP,因此我知道这是可能的(除非我在这里丢失了一些东西)。但是,IBM云似乎具有此功能。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

您的实例不在公共Internet上,并且不能直接从公共Internet寻址。取而代之的是,公共IP地址将流量吸引到Google的前端,然后Google服务解析该地址。尽管IP地址可能会长时间绑定到实例,但是这些地址会多次重用。

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

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

您可以使用元数据服务确定实例的公共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