永久性地将静态IP绑定到可抢占的Google云虚拟机

Jur*_*ian 10 google-compute-engine google-cloud-platform google-kubernetes-engine

对于我们的项目,由于IP白名单,我们需要与我们的Google Cloud VM实例建立静态IP绑定.由于它是一个可抢占的托管组,因此VM将偶尔终止.

但是,当它终止时,我会在操作日志中compute.instances.preempted直接看到后跟compute.instances.repair.recreateInstance注释:

实例组管理器'xxx'在实例'xxx'上启动了recreateInstance.原因:实例的意图是RUNNING但实例的状态是STOPPING.

之后是一个delete和一个insert操作,以便恢复实例.

文件说明:

您可以通过停止实例来模拟实例抢占.

在这种情况下,当VM再次启动时,IP地址将保持连接状态.

A)所以我的问题是,是否有可能让实例组管理器在抢占的情况下停止并启动VM,而不是重新创建?由于重新创建意味着静态IP将被分离并且每次都需要手动附加.

B)如果无法选择A,如何自动附加静态IP地址,以便在重新创建VM时不必手动附加它?我宁愿没有额外的NAT VM实例来处理这个问题.

提前致谢!

Jur*_*ian 1

我找到了一种方法,可以确保网络中的所有虚拟机都具有相同的传出 IP 地址。使用Cloud NAT,您可以分配所有虚拟机都将使用的静态 IP,但有一个缺点:

仅当流量没有其他匹配路由或路径时,GCP 才会使用 Cloud NAT 转发流量。在以下情况下,即使配置了 Cloud NAT,也不会使用 Cloud NAT:

  • 您可以在虚拟机的接口上配置外部 IP。

    如果在虚拟机的接口上配置了外部IP,则以虚拟机内部IP为源IP的IP报文将使用虚拟机的外部IP访问Internet。不会对此类数据包执行 NAT。但是,分配给接口的别名 IP 范围仍然可以使用 NAT,因为它们无法使用外部 IP 访问 Internet。通过此配置,您可以通过 SSH 直接连接到 GKE 虚拟机,同时让 GKE Pod/容器使用 Cloud NAT 访问互联网。

    请注意,只要 VM 网络接口本身没有外部 IP 地址,使 VM 通过负载均衡器外部 IP 进行访问并不会阻止 VM 使用 NAT。

删除虚拟机的外部 IP 还会阻止您直接通过 SSH 访问虚拟机,甚至无法从 gcloud 控制台本身进行 SSH 访问。上面的引用显示了带有负载均衡器的替代方案,另一种方式是bastion,但不能直接解决来自 Kubernetes/kubectl 等的访问。

如果这对您来说没有问题,那么这就是您要走的路。