【问题标题】:Why does GCP not allow external public IP within VM为什么GCP不允许VM内的外部公共IP
【发布时间】:2021-01-09 23:37:21
【问题描述】:

我一直在尝试通过 GCP 在我的服务器上设置一些软件,并分配了一个公共静态 IP。但是我没有通过ifconfigip addr 在VM 中看到它。我知道有no way 让IP 显示在VM 内,并且从NAT 到公共IP 有1 对1 的映射,但我不明白的是,为什么。虽然this question 的问题基本相同,但答案并没有真正清楚地回答 why 部分。

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

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

谢谢!

【问题讨论】:

  • 我绝不是 GCP 方面的专家(更不用说它的内部知识了),因为我的经验更多地在于 Azure(它也进行外部 NATting),但我想至少部分原因是从实例本身外部减少基于池的 IP 分配的一些痛点。
  • 您能详细说明一下吗? IBM显然做到了(在问题中链接)。我对细节、问题、痛点实际上很感兴趣。我不知道,这就是为什么
  • @DazWilkin 的回答很好。总之,公共静态 IP 地址未分配给您的 VM。这就是为什么您在网络接口上看不到它们的原因。您可以从实例元数据中读取 IP 地址。公共 IP 地址被分配给一个特殊的一对一 NAT,该 NAT 管理公共 IP 到私有 IP 的路由。 Google 定义:“如果网络接口分配有外部 IP 地址,Google Cloud 会自动对来源与接口的主要内部 IP 地址匹配的数据包执行一对一的 NAT。”
  • @JohnHanley“公共静态 IP 地址未分配给您的虚拟机”。我知道,我想知道为什么不呢?
  • 1/2):因为 Google 就是这样设计网络的。在 GCP 中,网络是在软件中完成的。公共 IP 地址必须分配给真正的硬件接口,然后路由到最终目的地(您的 VM)。对于 IBM,您说的是他们云的“传统”版本。 IBM 传统云可以将公共 IP 地址分配给 VM,因为它们之间有一个最小的软件层虚拟化网络。 IBM 的 Cloud 还提供了真正的虚拟化 VPC 网络。

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


【解决方案1】:

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

您的实例不在公共互联网上,也不能直接从公共互联网上寻址。相反,公共 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

【讨论】:

  • 我知道您回答中的前两段。我了解拥有单个 IP 的优势,但我想知道为什么我不能通过 GCP 将 ip 放在接口上。我知道这是他们做出的积极决定,并想知道是否有任何潜在的原因。某些服务要求服务器具有公共 IP,但这也不是重点。我想知道为什么。为什么所有主要云平台上都没有该功能?
  • “在这些情况下,您的实例都不需要配置此 IP 地址”,确实,这并不是真的需要做某事,我试图这样做,并意识到有没门。我想知道为什么我基本上不允许这样做。
猜你喜欢
  • 2020-05-27
  • 2022-01-19
  • 2017-01-27
  • 1970-01-01
  • 2020-08-08
  • 2015-02-06
  • 2014-03-25
  • 2020-04-02
  • 2017-01-01
相关资源
最近更新 更多