Google cloud platform 将静态IP永久绑定到可抢占的google云VM

Google cloud platform 将静态IP永久绑定到可抢占的google云VM,google-cloud-platform,google-compute-engine,google-kubernetes-engine,Google Cloud Platform,Google Compute Engine,Google Kubernetes Engine,对于我们的项目,由于IP白名单,我们需要一个静态IP绑定到我们的Google云VM实例。 由于它是一个可抢占的托管组,VM将偶尔终止一次 但是,当它终止时,我会在操作日志中看到compute.instances.preempted后面紧跟着compute.instances.repair.recreateInstance,注意: 实例组管理器“xxx”已在实例上启动重新创建实例 “xxx”。 原因:实例的意图正在运行,但实例的状态为 停下来 然后执行delete和insert操作以恢复实例 文件

对于我们的项目,由于IP白名单,我们需要一个静态IP绑定到我们的Google云VM实例。 由于它是一个可抢占的托管组,VM将偶尔终止一次

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

实例组管理器“xxx”已在实例上启动重新创建实例 “xxx”。 原因:实例的意图正在运行,但实例的状态为 停下来

然后执行
delete
insert
操作以恢复实例

文件:

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

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

A) 因此,我的问题是,是否可以让实例组管理器在抢占事件中停止并启动VM,而不是重新创建?因为重新创建意味着静态IP将被分离,每次都需要手动连接

B) 如果选项A不可行,如何自动附加静态IP地址,以便在重新创建VM时不必手动附加它?我不希望有一个额外的NAT VM实例来解决这个问题


提前谢谢

一种解决方案是让实例动态选择临时IP,但将组设置为具有静态IP的负载平衡器的目标。这样,即使在创建或销毁实例时,LB也可以充当前端,使IP在一段时间内保持连续。

回答您的问题:

(A) 目前这是不可能的,我也不确定这是否可能。根据设计,可抢占虚拟机被删除,以便为普通虚拟机(如果给定区域中存在容量限制)留出空间,或定期将其与普通虚拟机区分开来。在后一种情况下,抢占可能看起来像一个启动/停止事件,但在前一种情况下,可能需要相当长的时间才能重新创建VM

(B) 目前还没有很好的方法来实现这一目标

  • 如果您的组只有一个实例,您可以在实例模板中对IP地址进行硬编码
  • 否则,目前我能想到的唯一解决方案(除了使用负载平衡器)就是编写一个附加NAT IP的启动脚本

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

GCP仅在没有其他服务时使用云NAT转发流量 匹配交通的路线或路径。云NAT未在中使用 以下情况,即使已配置:

  • 您可以在VM的接口上配置外部IP

    如果在VM的接口上配置外部IP,则将VM的内部IP作为源IP的IP数据包将使用VM的 外部IP连接到Internet。NAT将不会在上执行 这样的包。但是,分配给接口的别名IP范围 仍然可以使用NAT,因为他们无法使用外部IP访问 互联网。使用此配置,您可以直接连接到 GKE虚拟机通过SSH,但GKE吊舱/容器使用云 NAT连接到互联网

    请注意,通过负载平衡器外部IP访问虚拟机并不妨碍虚拟机使用NAT,只要虚拟机网络可用 接口本身没有外部IP地址

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


如果这对您来说没有问题,那么这就是解决方法。

我找到了解决方法(特别是,在两次重新创建之间保留分配给可抢占VM实例的静态IP地址),但需要注意的是,托管实例组具有以下属性:

  • 不是自动缩放
  • 最大组大小为1(即此组中只有一个VM)
  • 自动修复是默认设置(即,仅在虚拟机终止后重新创建虚拟机)
  • 您需要遵循以下步骤:

  • 保留一个静态IP
  • 创建配置为可抢占的实例模板
  • 创建托管组,将模板分配给该组
  • 等待该组启动您的虚拟机
  • 虚拟机启动后,将步骤1中保留的静态IP分配给虚拟机
  • 通过
    gcloud
    (请参阅)创建从VM实例派生的新实例模板
  • 在控制台中查看新创建的实例模板,并注意您可以看到分配给该模板的外部IP
  • 更新MiG(托管实例组)以使用步骤6中创建的新模板
  • 使用更换方法对MiG进行主动滚动更新
  • 确认您的虚拟机已使用相同的名称重新创建,磁盘已保留(或未保留,具体取决于您在原始模板中配置磁盘的方式),并且虚拟机已保留其IP地址
  • 关于步骤6,我的
    gcloud
    命令如下所示:

    gcloud compute instance-templates create vm-template-with-static-ip \
        --source-instance=source-vm-id \
        --source-instance-zone=us-east4-c
    
    几乎不用说,这种设置只有在您想:

  • 通过使用一个可抢占的虚拟机将成本降至最低
  • 不必处理在虚拟机被抢占后再次打开虚拟机的麻烦,确保尽可能多的正常运行时间
  • 如果您不介意在虚拟机被抢占后手动重新打开它(并且可能不知道它已经关闭了多长时间),那么请帮自己一个忙,不要麻烦w