GCP实例IP地址生命周期管理

发布一下 0 0

作者:MeshCloud脉时云公有云架构师付光

一、背景

GCP中实例分配IP地址默认使用DHCP分配,DHCP的默认租约期为1个小时。当实例关机超过一个小时原分配的IP地址可能会被分配到其他的实例上。

为了使IP地址在实例的生命周期内不会改变,则需要修改此默认的分配规则。目前主要有三类:

  1. 升级临时IP为静态IP地址
  2. 延长DHCP默认的租约期
  3. 创建实例的时候指定使用的子网IP

二、三种方式的优缺点

1. 升级临时IP为静态IP地址

这种方式会将IP地址设置为静态IP,设置静态IP之后,IP有独立的生命周期。在实例选择了静态IP之后,此IP将伴随实例整个生命周期,即使实例的生命周期结束,静态IP地址依然存在,只有手动删除静态IP,IP才会被DHCP资源池回收。

在存在有自动扩缩容的项目中,此类方法会导致为使用的静态IP增多,逐渐耗尽资源池中的IP地址。

2. 延长DHCP默认的租约期

DHCP默认的租约期为1个小时,目前不支持修改(代码中有相关的配置项,只是没有开放出来让客户自定义)。

如果没有设置合适的租约期的话,延长默认的租约期也会导致和第一种类似的故障,耗尽资源池中的IP地址。

3. 创建实例的时候指定使用的子网IP

在创建实例的时候指定子网中未使用的IP地址,则此IP地址不会在实例关机时自动释放。只有当实例被删除时才会释放IP地址。

此方式增加了创建虚拟主机时的工作量,但是不用担心实例被删除时无法自动释放IP到资源池中。

https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address#create_a_vm_instance_with_a_specific_internal_ip_address

三、配置方法

1. 升级临时IP为静态IP地址

# 获取主机IP信息gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "networkIP"# 创建静态IP地址gcloud compute addresses create ADDRESS_NAME_1 [ADDRESS_NAME_2..] \    --addresses IP_ADDRESS_1,[IP_ADDRESS_2,..] \--region REGION \--subnet SUBNETWORK# API方式创建静态IP地址POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses{  "addressType": "INTERNAL",  "address": "IP_ADDRESS",  "name": "ADDRESS_NAME",  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"}
# 获取所有主机的IP地址信息gcloud compute instances list --format="value(name,networkInterfaces[].networkIP,networkInterfaces[].subnetwork)"# 获取所有静态地址信息gcloud compute addresses list --filter="addressType:INTERNAL AND purpose:GCE_ENDPOINT" --format="value(name,address,status)"
# 获取所有的静态地址IP地址信息gcloud compute addresses list# API方式获取所有的静态地址IP地址信息GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addressesGET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses
# 删除指定的静态地址gcloud compute addresses delete ADDRESS_NAME \    --region REGION# API方式删除指定的静态地址DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAMEDELETE https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-west1/addresses/example-address-to-delete
#!/bin/bashgcloud compute addresses list --format=json | jq -c '.[]' | while read linedo    echo $line | jq '.addressType'    echo $line | jq '.status'    echo "================================="done

2. 创建实例的时候指定使用的子网IP

# 创建实例的时候指定IP地址gcloud compute instances create VM_NAME     --private-network-ip IP_ADDRESS# API方式创建实例时指定IP地址POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances{  "name": "VM_NAME",  "machineType": "zones/us-central1-f/machineTypes/e2-micro",  "networkInterfaces": [{    "accessConfigs": [{      "type": "ONE_TO_ONE_NAT",      "name": "External NAT",     }],    "network": "global/networks/default",    "networkIP": "IP_ADDRESS"  }],  "disks": [{     "autoDelete": "true",     "boot": "true",     "type": "PERSISTENT",     "initializeParams": {        "sourceImage": "projects/debian-cloud/global/images/v20150818"     }   }]}

三、参考文件

https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/183779.html