通过在代管式实例组 (MIG) 中配置有状态 IP 地址,可确保在自动修复、更新和重新创建该组中的虚拟机实例时保留 IP 地址。
您可以保留内部和外部 IPv4 地址。您可以将 IP 地址配置为自动分配,也可以将特定 IP 地址分配给 MIG 中的每个虚拟机实例。
准备工作
- 查看何时使用有状态 MIG 以及有状态 MIG 的工作原理
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
系统不支持 IPv6 地址。
没有子网的网络(例如旧版网络)不支持内部 IP 地址。
- 如果您的 MIG 采用有状态配置,则您无法使用自动扩缩功能。
- 如果您要使用自动滚动更新,则必须将替换方法设置为
RECREATE
。 - 对于有状态区域级 MIG,您必须停用主动式重新分布功能(将重新分布类型设置为
NONE
),以防止通过自动跨可用区重新分布删除有状态实例。 - 如果您使用所有实例配置来替换实例模板属性,则无法在任何每个实例配置中指定这些属性,同时也无法在组的所有实例配置中指定这些属性。
- 您的应用要求在分配 IP 地址后保持静态,例如 Kafka。
- 您的应用的配置取决于特定的 IP 地址,例如 DNS 服务器。
- 用户(包括其他应用)通过专用静态 IP 地址访问您的服务器,例如文件服务器。
- 您需要在不更改网络配置的情况下迁移现有工作负载。
- 您的应用要求在分配 IP 地址后保持静态。但是您的应用不需要为特定实例分配特定的 IP 地址。IP 地址可以在创建实例时自动分配。
- 您的用户(包括其他应用)通过您在部署应用后发布的静态 IP 地址访问您的服务器。
- 您希望从实例自动修复和自动更新中受益,同时保留在创建实例时自动分配的静态 IP 地址。
- 对于新实例,MIG 会自动分配和预留静态 IP 地址。
- 对于现有实例,MIG 会通过预留相应的静态 IP 地址将使用中的临时内部或外部 IP 地址升级为静态地址。
对于没有外部 IP 地址的现有实例,MIG 会分配并预留静态 IP 地址,并使用以下默认值将访问权限配置添加到相应的网络接口:
"accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "natIP": "XX.XX.XX.XX", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ]
在 Google Cloud 控制台中,转到实例组页面。
选择您的项目并点击继续。
点击创建实例组。
选择新建托管式实例组(有状态)。
为该实例组指定名称。
选择实例模板。
在实例数下方,指定此托管式实例组将要包含的实例数量。
在有状态配置下,展开要设为有状态地址的外部 IP 地址和内部 IP 地址。
- 在有状态下,选择是。
- 在永久性实例删除时下拉列表中,选择在删除虚拟机实例后要对有状态 IP 地址执行的操作。可用的选项包括:
- 分离 IP 地址(默认):在删除实例时取消分配地址并保留地址。
- 删除 IP 地址:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
- 完成有状态配置后,点击完成。
点击创建。
--stateful-internal-ip
,用于将给定网络接口的内部 IP 地址标记为有状态。--stateful-external-ip
,用于将给定网络接口的外部 IP 地址标记为有状态。- INSTANCE_GROUP_NAME:要创建的 MIG 的名称。
- INSTANCE_TEMPLATE:创建新实例时要使用的实例模板的名称。
- SIZE:此实例组中所需的初始实例数量。
- NI_NAME:(可选)网络接口名称。如果未提供,则必须提供
enabled
选项,并且默认采用名为nic0
的主要网络接口。 如果您有多个网络接口,可以为每个网络接口中的每个 IP 地址指定此标志。 DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
never
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。on-permanent-instance-deletion
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
stateful_internal_ip
,用于将给定网络接口的内部 IP 地址标记为有状态。stateful_external_ip
,用于将给定网络接口的外部 IP 地址标记为有状态。- PROJECT:请求的项目 ID。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - NAME:要创建的 MIG 的名称。
- INSTANCE_TEMPLATE:创建新实例时要使用的实例模板的名称。
- SIZE:此实例组中所需的初始实例数量。
- NI_NAME:(可选)网络接口名称。如果未提供,则必须提供
enabled
选项,并且默认采用名为nic0
的主要网络接口。 如果您有多个网络接口,可以指定多个 NI_NAMES。 DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
NEVER
:(默认)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。ON_PERMANENT_INSTANCE_DELETION
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
- 将 IP 地址配置为实例组中所有现有实例和未来实例的有状态地址。这会将所有现有实例的相应临时 IP 地址提升为静态 IP 地址。
- 更新 IP 地址的现有有状态配置。
在 Google Cloud 控制台中,转到实例组页面。
点击要指定有状态 IP 地址的实例组的名称。
点击修改以修改此托管式实例组。
在有状态配置下,展开要设为有状态地址的外部 IP 地址和内部 IP 地址。
- 在有状态下,选择是。
- 在永久性实例删除时下拉列表中,选择在删除虚拟机实例后要对有状态 IP 地址执行的操作。可用的选项包括:
- 分离 IP 地址(默认):在删除实例时取消分配地址并保留地址。
- 删除 IP 地址:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
- 更新有状态配置后,点击完成。
- 点击保存以完成更新。
- INSTANCE_GROUP_NAME:要更新的 MIG 的名称。
- NI_NAME:(可选)网络接口名称。如果未提供,则必须提供
enabled
选项,并且默认采用名为nic0
的主要网络接口。 如果您有多个网络接口,可以为每个网络接口中的每个 IP 地址指定此标志。 DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
never
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。on-permanent-instance-deletion
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
- PROJECT:请求的项目 ID。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - NAME:要创建的 MIG 的名称。
- NI_NAME:(必需)网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
NEVER
:(默认)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。ON_PERMANENT_INSTANCE_DELETION
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
- 重新设计应用的架构,使其不再依赖于静态 IP 地址。
- 您误将 IP 配置为有状态并想要将其还原。
在 Google Cloud 控制台中,转到实例组页面。
点击要移除 IP 地址的有状态配置的实例组的名称。
点击修改以修改此托管式实例组。
在有状态配置下,展开您要设为无状态地址的外部 IP 地址和内部 IP 地址。
- 将有状态选项更改为否。
- 点击完成。
完成更改后,点击保存。
- INSTANCE_GROUP_NAME:要更新的 MIG 的名称。
- NI_NAME(必需):网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 - PROJECT:请求的项目 ID。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - INSTANCE_GROUP_NAME:要创建的 MIG 的名称。
- NI_NAME:(必需)网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 - 将现有工作负载(引入现有预留的静态 IP 地址)从独立虚拟机实例迁移到有状态 MIG,以便从自动修复和自动更新中受益。
- 分配架构或工作负载配置所需的特定预留的静态 IP 地址。
--stateful-internal-ip
,用于设置给定网络接口的静态内部 IP 地址。--stateful-external-ip
,用于设置给定网络接口的静态外部 IP 地址。- INSTANCE_GROUP_NAME:MIG 的名称。
- INSTANCE_NAME:要创建的实例的名称。
- NI_NAME:(可选)网络接口名称。如果未提供,则默认使用名为
nic0
的主要网络接口。 如果您有多个网络接口,可以为每个网络接口中的每个 IP 指定此标志。 ADDRESS(必需):要采用以下格式之一分配给实例的静态 IP 地址:
- 地址。静态 IP 地址预留的网址,例如:
"projects/example-project/regions/us-east1/addresses/example-ip-name"
。 - 字面量 - 例如:
"130.211.181.55"
。- 如果提供的 IP 地址尚未预留,则 MIG 会自动创建相应的 IP 地址预留。
- 如果提供的 IP 地址已预留,则 MIG 会将预留分配给实例。
- 地址。静态 IP 地址预留的网址,例如:
DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
never
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。on-permanent-instance-deletion
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
preserved_state.internal_ip
,用于将给定网络接口的内部 IP 地址标记为有状态。preserved_state.external_ip
,用于将给定网络接口的外部 IP 地址标记为有状态。- PROJECT_ID:请求的项目 ID。
- NAME:MIG 的名称。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - INSTANCE_NAME:要创建的实例的名称。
- NI_NAME(必需):网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 - ADDRESS:(可选)要以静态 IP 地址预留的网址格式分配给实例的静态 IP 地址,例如:
"projects/example-project/regions/us-east1/addresses/example-ip-name"
。在分配静态 IP 地址时,您一次必须且只能设置一个字段(address
或literal
)。 - LITERAL:(可选)要以字面量格式分配给实例的静态 IP 地址,例如:
"130.211.181.55"
。在分配静态 IP 地址时,您一次必须且只能设置一个字段(address
或literal
)。- 如果提供的字面量 IP 地址尚未预留,则 MIG 会自动创建相应的 IP 地址预留。
- 如果提供的字面量 IP 地址已预留,则 MIG 会将预留分配给实例。
DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
NEVER
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。ON_PERMANENT_INSTANCE_DELETION
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
- 为 MIG 中的现有实例分配静态 IP 地址。对于静态外部 IP 地址,此操作需要刷新实例;对于静态内部 IP 地址,此操作需要重新创建实例。
- 更新已分配的静态 IP 地址的删除规则。此操作可以在不中断正在运行的实例的情况下完成。
--stateful-internal-ip
,用于设置给定网络接口的静态内部 IP 地址。--stateful-external-ip
,用于设置给定网络接口的静态外部 IP 地址。- INSTANCE_GROUP_NAME:MIG 的名称。
- INSTANCE_NAME:要为其配置有状态 IP 地址的实例的名称。
- NI_NAME:(可选)网络接口名称。如果未提供,则默认使用名为
nic0
的主要网络接口。 如果您有多个网络接口,可以为每个网络接口中的每个 IP 指定此标志。 - ADDRESS:要采用以下格式之一分配给实例的静态 IP 地址:
- 地址。静态 IP 地址预留的网址,例如:
"projects/example-project/regions/us-east1/addresses/example-ip-name"
。 - 字面量。例如
"130.211.181.55"
。- 如果提供的 IP 地址尚未预留,则 MIG 会自动创建相应的 IP 地址预留。
- 如果提供的 IP 地址已预留,则 MIG 会将预留分配给实例。
- 如果实例的个别实例配置中已定义地址,则此子标志为可选项。否则为必需项。
- 如果省略,则配置的地址将保持不变。
- 地址。静态 IP 地址预留的网址,例如:
DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
never
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。on-permanent-instance-deletion
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。- 如果省略,则系统会为新的有状态 IP 配置设置默认值;该值在现有配置中将保持不变。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
--update-instance
:(可选。Default.) 立即将更改应用于实例。如果您使用--no-update-instance
标志,则更改会保持未应用状态,并在您重新创建实例或之后将更新应用于实例时应用。MINIMAL_ACTION:(可选)在将实例配置更新应用于实例时,至少执行指定的操作。必须与
--update-instance
标志结合使用。该值必须为以下项之一:none
:不执行任何操作。refresh
:应用可在不停止实例的情况下应用的更新。restart
:停止实例,然后重新启动。replace
:重新创建实例。
- 更新
file-server
实例的实例配置:- 添加有状态外部 IP 配置,并指向
file-server-ip
地址预留。 - 保持现有有状态数据磁盘配置不变。
- 添加有状态外部 IP 配置,并指向
- 立即将每个实例配置更新应用于
file-server
实例,因为--update-instance
标志已包含在内:刷新实例并分配file-server-ip
预留中的外部静态 IP 地址。 - PROJECT_ID:请求的项目 ID。
- NAME:MIG 的名称。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - INSTANCE_NAME(必需):要为其配置静态 IP 的实例的名称。
- NI_NAME(必需):网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 - ADDRESS:(可选)要以静态 IP 地址预留的网址格式分配给实例的静态 IP 地址,例如:
"projects/example-project/regions/us-east1/addresses/example-ip-name"
。在分配静态 IP 地址时,您一次必须且只能设置一个字段(地址或字面量)。 - LITERAL:(可选)要以字面量格式分配给实例的静态 IP 地址。例如:
"130.211.181.55"
。在分配静态 IP 地址时,您一次必须且只能设置一个字段(地址或字面量)。- 如果提供的字面量 IP 地址尚未预留,则 MIG 会自动创建相应的 IP 地址预留。
- 如果提供的字面量 IP 地址已预留,则 MIG 会将预留分配给实例。
DELETE_RULE:(可选)设置在虚拟机实例永久删除后应如何处理关联的静态地址资源。可用的选项如下所示:
NEVER
:(默认值)切勿删除静态 IP 地址。请改为在删除实例时取消分配地址并保留地址。ON_PERMANENT_INSTANCE_DELETION
:从实例组永久删除实例时(例如,手动删除实例或减小实例组的大小时),删除静态 IP 地址预留。- 如果省略,则系统会为新的有状态 IP 配置设置默认值;该值在现有配置中将保持不变。
无论删除规则的值如何,实例组都始终会在实例自动修复、更新和重新创建操作时保留有状态 IP 地址。
FINGERPRINT:(可选)给定配置的指纹(如果已存在)。用于乐观锁定。如果该指纹与提供的指纹不同,则操作会失败,因为这表示实例配置在上次读取后发生了更改。如需查看最新指纹,请参阅区域级或可用区级 MIG 的
listPerInstanceConfigs
方法的输出。如果省略fingerprint
,操作会继续,而不会进行指纹比较。- 添加有状态外部 IP 配置,并指向
file-server-ip
地址预留。 - 保持现有有状态数据磁盘配置不变。
- 重新设计应用的架构,使其不再依赖于静态 IP 地址。
- 您误将 IP 配置为有状态并想要将其还原。
- IP 地址在实例上保持活跃,但不再为有状态。
- 当您重新创建或更新实例或者实例自动修复时,MIG 会取消分配关联的静态 IP 地址预留并自动分配临时地址。
- 取消分配后,静态 IP 地址仍会预留。
- INSTANCE_GROUP_NAME:MIG 的名称。
- INSTANCE_NAME(必需):要移除其有状态 IP 配置的实例的名称。
- NI_NAME(必需):网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 --update-instance
:(可选。Default.) 立即将更改应用于实例。如果您使用--no-update-instance
标志,则更改会保持未应用状态,并在您重新创建实例或之后将更新应用于实例时应用。MINIMAL_ACTION:(可选)在将实例配置更新应用于实例时,至少执行指定的操作。此标志只能与
--update-instance
标志一起使用。该值必须为以下项之一:none
:不执行任何操作。refresh
:应用可在不停止实例的情况下应用的更新。restart
:停止实例,然后重新启动。replace
:重新创建实例。
如果省略此项,则使用更新所需的中断性最低的操作。
- PROJECT_ID:请求的项目 ID。
- NAME:MIG 的名称。
- REGION:对于区域级 MIG,这是实例组所在的区域。对于可用区级 MIG,将
regions/REGION
替换为zones/ZONE
并指定 MIG 所在的可用区。 - INSTANCE_NAME(必需):要移除其有状态 IP 配置的实例的名称。
- NI_NAME(必需):网络接口名称。主要网络接口名为
nic0
。 如果您有多个网络接口,可以指定多个 NI_NAMES。 - FINGERPRINT:(可选)给定配置的指纹(如果已存在)。用于乐观锁定。如果该指纹与提供的指纹不同,则操作会失败,因为这表示实例配置在上次读取后发生了更改。如需查看最新指纹,请参阅区域级或可用区级 MIG 的
listPerInstanceConfigs
方法的输出。如果省略fingerprint
,操作会继续,而不会进行指纹比较。 - 如需仅移除有状态 IP 地址,请参阅将之前的有状态 IP 地址声明为无状态。
- 如需从有状态政策中移除所有有状态配置,请参阅移除有状态政策。
- 如需仅移除有状态 IP 地址,请参阅将静态 IP 地址与 MIG 中的现有虚拟机取消关联。
- 如需从实例配置中移除所有有状态配置,请参阅移除特定虚拟机的有状态配置。
- 如需在永久删除实例时自动释放静态 IP 地址预留,请将
autoDelete
参数设置为ON_PERMANENT_INSTANCE_DELETION
。 - 如需手动释放静态 IP 地址预留,请将
autoDelete
参数设置为NEVER
。如需清理未使用的静态 IP 地址预留(例如,为了避免产生不必要的费用),请参阅以下文档: - 了解如何应用、查看和移除有状态配置。
- 获取有关特定 MIG 及其代管实例的信息,包括虚拟机状态和属性。
- 详细了解如何使用代管式实例。
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
限制
具有有状态 IP 地址的 MIG 存在以下限制:
具有有状态配置的 MIG(有状态 MIG)具有以下限制:
价格
您需要根据网络价格为外部 IP 地址付费。
何时使用有状态 IP 地址
在以下场景中,保留实例的 IP 地址非常有用:
为实例组中的所有虚拟机配置有状态 IP 地址
在以下场景中,为 MIG 中的所有虚拟机配置有状态 IP 地址非常有用:
如需为实例组中的现有和未来的虚拟机实例保留静态内部或外部 IP 地址,请在有状态政策中配置该实例组。
当您将有状态 IP 地址配置添加到实例组的有状态政策时,MIG 会通过以下方式应用配置:
如需预留静态 IP 地址,MIG 会创建地址资源。
在创建 MIG 时配置有状态 IP 地址
使用 Google Cloud 控制台、gcloud CLI、Terraform 或 REST。
控制台
gcloud
创建 MIG 时,如需指定实例模板的网络接口中的哪些 IP 地址应为有状态,请将以下一个或多个标志与
gcloud compute instance-groups managed create
命令结合使用:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --template INSTANCE_TEMPLATE \ --size SIZE \ --instance-redistribution-type NONE \ --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]
替换以下内容:
示例
您需要为默认和自定义网络创建具有静态内部 IP 地址的区域级虚拟机实例组,并且仅为默认网络创建静态外部 IP 地址。您希望自动分配地址,但需要通过实例自动修复、更新和重新创建事件保留地址。将实例配置存储在名为
node-template
的实例模板中。如需创建该实例组,请运行以下命令:
gcloud compute instance-groups managed create example-group \ --region us-east1 \ --template node-template \ --base-instance-name node \ --instance-redistribution-type NONE \ --size 3 \ --stateful-internal-ip interface-name=nic0,auto-delete=on-permanent-instance-deletion --stateful-internal-ip interface-name=nic1,auto-delete=on-permanent-instance-deletion --stateful-external-ip enabled,auto-delete=on-permanent-instance-deletion
nic0
和nic1
网络接口中的内部 IP 地址和nic0
网络接口中的外部 IP 地址针对该实例组中的所有实例都配置为有状态。该实例组会自动为每个实例预留静态内部和外部 IP 地址。由于auto-delete
标志设置为on-permanent-instance-deletion
,因此,当您删除关联的实例或整个实例组时,该实例组将自动删除静态 IP 地址预留。如需验证
nic0
和nic1
网络接口中的内部 IP 地址以及nic0
网络接口中的外部 IP 地址是否配置为有状态,请运行以下命令:gcloud compute instance-groups managed describe example-group \ --zone us-east1-c
输出类似以下内容:
baseInstanceName: node ... name: example-group ... statefulPolicy: preservedState: internalIPs: nic0: autoDelete: ON_PERMANENT_INSTANCE_DELETION nic1: autoDelete: ON_PERMANENT_INSTANCE_DELETION externalIPs: nic0: autoDelete: ON_PERMANENT_INSTANCE_DELETION ...
您可以看到,该实例组的有状态政策将
nic0
和nic1
网络接口中的内部 IP 地址以及nic0
网络接口中的外部 IP 地址声明为有状态,并规定在永久删除实例时删除静态 IP 地址预留。Terraform
如果您尚未创建您希望为 MIG 中的每个虚拟机指定机器类型、启动磁盘映像、网络和其他虚拟机属性的实例模板,请创建实例模板。
创建 MIG 时,如需指定实例模板的网络接口中的哪些 IP 地址应为有状态,请使用以下一个或多个块:
以下示例在创建区域级 MIG 时配置有状态 IP 地址。如需详细了解示例中使用的资源,请参阅
google_compute_region_instance_group_manager
资源。如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
REST
创建 MIG 时,如需指定实例模板的网络接口中的哪些 IP 地址应为有状态,请将这些 IP 地址添加到
instanceGroupManagers.insert
或regionInstanceGroupManagers.insert
方法的请求正文中的statefulPolicy
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "versions": [ { "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE" } ], "targetSize": SIZE, "statefulPolicy": { "preservedState": { "internalIPs": { "NI_NAME": {"autoDelete": "DELETE_RULE" } }, "externalIPs": { "NI_NAME": {"autoDelete": "DELETE_RULE" } } } }, "updatePolicy": { "instanceRedistributionType": "NONE" } }
替换以下内容:
示例
您需要为默认和自定义网络创建具有静态内部 IP 地址的区域级虚拟机实例组,并且仅为默认网络创建静态外部 IP 地址。您希望自动分配地址,但需要通过实例自动修复、更新和重新创建事件保留地址。将实例配置存储在名为
node-template
的实例模板中。如需创建该实例组,请使用
regionInstanceGroupManagers.insert
方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers { "name": "example-group", "baseInstanceName": "node", "versions": [ { "instanceTemplate": "global/instanceTemplates/node-template" } ], "targetSize": 3, "statefulPolicy": { "preservedState": { "internalIPs": { "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }, "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } "externalIPs": { "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } } }, "updatePolicy": { "instanceRedistributionType": "NONE" } }
nic0
和nic1
网络接口中的内部 IP 地址和nic0
网络接口中的外部 IP 地址针对该实例组中的所有实例都配置为有状态。该实例组会自动为每个实例预留静态内部和外部 IP 地址。由于auto-delete
字段设置为ON_PERMANENT_INSTANCE_DELETION
,因此,当您删除关联的实例或整个实例组时,该实例组将自动删除静态 IP 地址预留。使用
regionInstanceGroupManagers.get
方法验证nic0
和nic1
网络接口中的内部 IP 以及nic0
网络接口中的外部 IP 是否在新的regionInstanceGroupManagers
资源的有状态政策中进行了配置:GET https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group
响应包含已配置的有状态政策:
{ "name": "example-group", "baseInstanceName": "node", ... "statefulPolicy": { "preservedState": { "internalIPs": { "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }, "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } "externalIPs": { "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" } } } } ... }
您可以看到,该实例组的有状态政策将
nic0
和nic1
网络接口中的内部 IP 地址以及nic0
网络接口中的外部 IP 地址声明为有状态,并规定在永久删除实例时删除关联的静态 IP 地址预留。为现有 MIG 中的 IP 地址设置和更新有状态配置
如果您在无状态 MIG(未进行任何有状态配置的 MIG)上运行工作负载,并且该工作负载需要静态 IP 地址,则可以将已分配给代管式虚拟机实例的 IP 地址配置为有状态。这可确保在实例自动修复、更新和重新创建事件时保留现有虚拟机的 IP 地址。您可以选择在删除实例后保留静态 IP 地址预留。
通过为现有 MIG 中的 IP 地址配置有状态政策,您可以执行以下操作:
MIG 会将有状态政策中更新后的配置自动且异步地应用于所有实例。更新有状态政策中的 IP 地址配置不会中断正在运行的虚拟机实例。如需了解详情,请参阅应用有状态政策更新。
控制台
gcloud
如需指定哪些 IP 地址应为有状态,或更新现有 MIG 的有状态 IP 配置,请将一个或多个
--stateful-internal-ip
或--stateful-external-ip
标志与gcloud compute instance-groups managed update
命令结合使用。gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \ --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]
替换以下内容:
如果已在给定网络接口的有状态政策中配置指定的 IP 地址,则该命令会更新配置。
示例
您需要通过静态外部 IP 地址将在名为
example-fs-group
的有状态 MIG 上运行的文件服务器公开给外部用户。实例组中的实例具有临时外部 IP 地址。您必须确保在实例自动修复和更新时保留该 IP 地址,以便外部用户能够通过发布的 IP 地址持续访问服务器。您还需要预留该 IP 地址,以确保在意外删除实例组时保持持续性。更新 MIG 以使用以下命令将外部 IP 地址定义为有状态:
gcloud compute instance-groups managed update example-fs-group \ --stateful-external-ip enabled
因此,实例组会针对所有代管式实例将
nic0
网络接口中的临时外部 IP 地址异步提升为静态 IP 地址。现在,外部 IP 地址会在实例自动修复、更新和重新创建事件时保留。由于未指定的
auto-delete
规则默认设置为never
,因此关联的静态 IP 地址预留在实例删除时会取消分配并保留。您可以通过运行
gcloud compute instance-groups managed describe example-fs-group
命令来验证是否已在有状态政策中配置有状态外部 IP。REST
如需指定哪些 IP 地址应为有状态,或更新现有 MIG 的有状态 IP 配置,请使用
instanceGroupManagers.patch
或regionInstanceGroupManagers.patch
方法:PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME { "statefulPolicy": { "preservedState": { "internalIPs": { "NI_NAME": {"autoDelete": "DELETE_RULE" } }, "externalIPs": { "NI_NAME": {"autoDelete": "DELETE_RULE" } } } } }
替换以下内容:
如果已在有状态政策中配置指定的 IP 地址,则该方法会修补配置。
示例
您需要通过静态外部 IP 地址将在名为
example-fs-group
的有状态 MIG 上运行的文件服务器公开给外部用户。实例组中的实例具有临时外部 IP 地址。您必须确保在实例自动修复和更新时保留该 IP 地址,以便外部用户能够通过发布的网络接口持续访问服务器。您还需要预留该 IP 地址,以确保在意外删除实例组时保持持续性。修补 MIG 以将外部 IP 地址定义为有状态:
PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-fs-group { "statefulPolicy": { "preservedState": { "externalIPs": { "nic0": {"autoDelete": "NEVER" } } } } }
因此,实例组会针对所有代管式实例将
nic0
网络接口中的临时外部 IP 地址异步提升为静态 IP 地址。现在,外部 IP 地址会在实例自动修复、更新和重新创建事件时保留。由于
autoDelete
规则设置为NEVER
,因此关联的静态 IP 地址预留在实例删除时会取消分配并保留。通过查看
regionInstanceGroupManagers.get
方法返回的regionInstanceGroupManagers
资源,验证是否已在有状态政策中配置外部 IP 地址。将之前的有状态 IP 地址声明为无状态
出于以下等原因,您可能需要将有状态 IP 地址配置为临时 IP 地址:
您可以从实例组的有状态政策中移除有状态 IP 配置,以针对所有代管式实例将给定网络接口中的 IP 地址声明为临时 IP 地址。
从有状态政策中移除有状态 IP 配置时,MIG 会自动以异步方式从实例组中所有实例的保留状态中移除 IP 地址。此操作不会中断正在运行的虚拟机实例。这些 IP 地址在实例上保持活跃,但不再为有状态。当您重新创建或更新实例或者实例自动修复时,MIG 会取消分配关联的静态 IP 地址并自动分配临时地址。如果您不再需要保留静态外部 IP 地址预留,现在可以将其释放。
如需了解详情,请参阅以下文档:
控制台
gcloud
如需指定将 MIG 的有状态政策中的哪些 IP 地址设为临时 IP 地址,请将
--remove-stateful-internal-ips
或--remove-stateful-external-ips
标志与gcloud compute instance-groups managed update
命令结合使用:gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \ --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \ --remove-stateful-external-ips NI_NAME[,NI_NAME,...]
替换以下内容:
如果您需要将名为
nic0
的默认主要网络接口中的有状态 IP 地址转变为临时 IP 地址,您还可以使用以下命令:gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \ --stateful-internal-ip disabled \ --stateful-external-ip disabled
示例
您的应用已通过名为
example-group
的 MIG 中虚拟机实例的已发布静态外部 IP 地址公开给用户。您已通过在 MIG 前面部署负载均衡器并借助该负载均衡器将流量路由到托管式虚拟机来重新设计服务的架构。您不再需要保留静态外部 IP 地址,并希望将虚拟机的外部 IP 地址设为临时 IP 地址。如需将 MIG 中虚拟机的有状态外部 IP 地址设为临时 IP 地址,请运行以下命令:
gcloud compute instance-groups managed update example-group \ --remove-stateful-external-ips nic0
MIG 会自动以异步方式从实例组中所有实例的保留状态中移除
nic0
网络接口的静态外部 IP 地址。外部 IP 地址在实例上保持活跃,但不再为有状态。当您重新创建或更新实例或者实例自动修复时,MIG 会取消分配关联的静态 IP 地址并自动分配临时地址。如果您不再需要保留静态外部 IP 地址预留,现在可以将其释放。REST
如需指定将 MIG 的有状态政策中的哪些 IP 地址设为临时 IP 地址,请使用
instanceGroupManagers.patch
或regionInstanceGroupManagers.patch
方法从 MIG 的有状态政策中移除每个 IP 的配置:PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME { "statefulPolicy": { "preservedState": { "internalIPs": { "NI_NAME": null }, "externalIPs": { "NI_NAME": null } } } }
替换以下内容:
示例
您的应用已通过名为
example-group
的 MIG 中虚拟机实例的已发布静态外部 IP 地址公开给用户。您已通过在 MIG 前面部署负载均衡器并借助该负载均衡器将流量路由到代管式虚拟机来重新设计服务的架构。您不再需要保留静态外部 IP 地址,并希望将虚拟机的外部 IP 地址设为临时 IP 地址。如需将 MIG 中虚拟机的有状态外部 IP 地址设为临时 IP 地址,请修补 MIG:
PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group { "statefulPolicy": { "preservedState": { "externalIPs": { "nic0": null } } } }
MIG 会自动以异步方式从实例组中所有实例的保留状态中移除
nic0
网络接口的静态外部 IP 地址。外部 IP 地址在实例上保持活跃,但不再为有状态。当您重新创建或更新实例或者实例自动修复时,MIG 会取消分配关联的静态 IP 地址并自动分配临时地址。如果您不再需要保留静态外部 IP 地址预留,现在可以将其释放。为 MIG 中的虚拟机单独配置有状态 IP 地址
在以下场景中,为 MIG 中的虚拟机单独配置有状态 IP 地址非常有用:
在 MIG 中创建虚拟机时配置静态 IP 地址
在 MIG 中单独创建特定实例时,您可以预留静态 IP 地址并将其分配给这些实例。在架构、配置或用户依赖于特定静态 IP 地址的情况下,这种做法对于将有状态应用从现有的独立虚拟机迁移到有状态 MIG 非常有用。
当您在 MIG 中手动创建实例并提供静态 IP 地址时,MIG 会执行以下操作:
gcloud
如需创建具有预定义静态 IP 地址的实例,请将
gcloud compute instance-groups managed create-instance
命令与以下一个或多个标志结合使用:gcloud compute instance-groups managed create-instance INSTANCE_GROUP_NAME \ --instance INSTANCE_NAME \ --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE]
替换以下内容:
示例
您需要向代理服务器集群再添加一个虚拟机实例,该实例在名为
proxy-cluster
的 MIG 上运行。您已创建了一个名为proxy-node-03-ip
的静态内部 IP 地址预留,并需要将其分配给新节点。即使决定将来删除节点,您也需要保留 IP 地址预留。运行以下命令来创建该节点:
gcloud compute instance-groups managed create-instance proxy-cluster \ --instance proxy-node-03 \ --stateful-internal-ip address="projects/example-project/regions/us-east1/addresses/proxy-node-03-ip",auto-delete=never
该命令会创建一个名为
proxy-node-03
的实例,将提供的名为proxy-node-03-ip
的静态内部 IP 地址分配给该实例,并将 IP 的有状态配置存储在相应的实例配置中。由于auto-delete
标志设置为never
,因此如果您以后删除该实例,IP 仍会预留。Terraform
如需创建具有预定义静态 IP 地址的虚拟机,请使用以下一个或多个块:
以下示例在区域级 MIG 中创建虚拟机时配置静态 IP 地址。如需详细了解示例中使用的资源,请参阅
google_compute_region_per_instance_config
资源。 对于可用区级 MIG,请使用google_compute_per_instance_config
资源。如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
REST
如需在 MIG 中创建一个或多个实例,设置自定义实例名称,并将预定义静态 IP 地址分配给这些实例,请使用
instanceGroupManagers.createInstances
或regionInstanceGroupManagers.createInstances
方法。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/createInstances { "instances": [ { "name": "INSTANCE_NAME", "preservedState" : { "internalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, "externalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, ... } }, ... ] }
替换以下内容:
示例
您需要向代理服务器集群再添加一个虚拟机实例,该实例在名为
proxy-cluster
的 MIG 上运行。您已创建了一个名为proxy-node-03-ip
的静态内部 IP 地址预留,并需要将其分配给新节点。即使决定将来删除节点,您也需要保留 IP 地址预留。调用
regionInstanceGroupManagers.createInstances
方法来创建其他实例:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/proxy-cluster/createInstances { "instances": [ { "name": "proxy-node-03", "preservedState" : { "internalIPs": { "nic0" : { "ipAddress": { "address": "projects/example-project/regions/us-east1/addresses/proxy-node-03-ip" }, "autoDelete": "NEVER" } } } } ] }
该方法会创建一个名为
proxy-node-03
的实例,将提供的名为proxy-node-03-ip
的静态内部 IP 地址分配给该实例,并将 IP 的有状态配置存储在相应的实例配置中。由于autoDelete
字段设置为NEVER
,因此如果您以后删除该实例,IP 仍会预留。为 MIG 中的现有虚拟机配置静态 IP 地址
您可以单独为代管式实例设置预定义的静态 IP 地址或更新有状态 IP 配置,例如:
对于您要为其配置外部静态 IP 的无外部 IP 地址的现有实例,MIG 会使用以下默认值将访问权限配置添加到相应的网络接口:
"accessConfigs": [ { "kind": "compute#accessConfig", "name": "External Nat", "natIP": "XX.XX.XX.XX", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ]
gcloud
如需为 MIG 中的虚拟机实例单独配置有状态 IP 地址,请在关联的实例配置中添加或更新有状态 IP 配置。
如果实例不存在每个实例配置,请将
gcloud compute instance-groups managed instance-configs create
命令与以下一个或多个标志结合使用:gcloud compute instance-groups managed instance-configs create INSTANCE_GROUP_NAME \ --instance INSTANCE_NAME \ --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ [--no-update-instance | --update-instance] [--instance-update-minimal-action MINIMAL_ACTION]
如果实例已存在实例配置,请将
gcloud compute instance-groups managed instance-configs update
命令与一个或多个--stateful-internal-ip
或--stateful-external-ip
标志结合使用:gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \ --instance INSTANCE_NAME \ --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \ [--no-update-instance | --update-instance] [--instance-update-minimal-action MINIMAL_ACTION]
替换以下内容:
如果省略此项,则使用更新所需的中断性最低的操作。
示例
您有一个名为
file-server
的文件服务器实例,它是有状态 MIG 中名为fs-group
的单个实例。实例组具有相应的个别实例配置,并配置了有状态数据磁盘。文件服务器只能在内部访问,但现在您的用户需要通过静态 IP 地址从外部访问它。您已通过创建file-server-ip
地址预留来预留静态外部 IP 地址。现在,您需要将此 IP 分配给文件服务器实例。运行以下命令来配置文件服务器实例的有状态外部 IP:
gcloud compute instance-groups managed instance-configs update fs-group \ --instance file-server \ --stateful-external-ip interface-name=nic0,address="projects/example-project/regions/us-east1/addresses/file-server-ip",auto-delete=never \ --update-instance
该命令将执行以下操作:
REST
如需为 MIG 中的虚拟机实例单独配置有状态 IP,请在关联的实例配置中添加或更新有状态 IP 配置。
如果给定实例尚不存在实例配置,请将
instanceGroupManagers.updatePerInstanceConfigs
方法 或regionInstanceGroupManagers.updatePerInstanceConfigs
方法与一个或多个 IP 地址的有状态配置结合使用:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/updatePerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "internalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, "externalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, ... }, "fingerprint: "FINGERPRINT" }, ... ] }
如果给定实例尚不存在实例配置,请将
instanceGroupManagers.patchPerInstanceConfigs
方法 或regionInstanceGroupManagers.patchPerInstanceConfigs
方法与一个或多个 IP 地址的有状态配置结合使用:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "internalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, "externalIPs": { "NI_NAME" : { "ipAddress": { "address": "ADDRESS", "literal": "LITERAL" }, "autoDelete": "DELETE_RULE" }, ... }, ... }, "fingerprint: "FINGERPRINT" }, ... ] }
替换以下内容:
updatePerInstanceConfigs
和patchPerInstanceConfigs
方法会更新指定的每个实例配置,但不会将配置更新应用于关联的代管式实例。当系统指示 MIG 重新创建或更新实例时,更改会应用于实例。您可以手动应用更新以将更改应用于实例。示例
您有一个名为
file-server
的文件服务器实例,它是有状态 MIG 中名为fs-group
的单个实例。实例组具有相应的个别实例配置,并配置了有状态数据磁盘。文件服务器只能在内部访问,但现在您的用户需要通过静态 IP 地址从外部访问它。您已通过创建file-server-ip
地址预留来预留静态外部 IP 地址。现在,您需要将此 IP 分配给文件服务器实例。如需使用新的有状态外部 IP 更新
file-server
的个别实例配置,请调用patchPerInstanceConfigs
方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/fs-group/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "file-server", "preservedState" : { "externalIPs": { "nic0" : { "ipAddress": { "address": "projects/example-project/regions/us-east1/addresses/file-server-ip" }, "autoDelete": "NEVER" } } } } ] }
该方法会修补
file-server
实例的实例配置:配置更新尚未应用于
file-server
虚拟机实例。以后在重新创建实例或将更新应用于实例时,MIG 会应用配置更新。如需将实例配置更新应用于
file-server
虚拟机实例,请为该实例调用regionInstanceGroupManagers.applyUpdatesToInstances
方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/gs-group/applyUpdatesToInstances { "instances": ["/zones/us-east1-b/instances/file-server"] }
该方法将配置的静态外部 IP 地址从
file-server-ip
预留分配给代管式实例。方法会刷新file-server
实例以分配外部 IP 地址。由于在有状态 IP 配置中
autoDelete
设置为NEVER
,因此如果您以后删除实例,IP 仍会预留。将静态 IP 地址与 MIG 中的现有虚拟机取消关联
您可能需要将静态 IP 地址与现有虚拟机取消关联,从而使网络接口对于虚拟机为临时接口。这在以下情况下非常有用:
如需将静态 IP 地址与 MIG 中的现有虚拟机取消关联并针对单个虚拟机将 IP 地址设为临时,您可以将此 IP 的有状态配置从关联的实例配置中移除或删除整个实例配置(如果不包含任何其他状态)应用更改会产生以下影响:
从个别实例配置中移除有状态 IP 配置不会中断正在运行的虚拟机实例,除非您明确选择这样做。
如需了解详情,请参阅以下文档:
gcloud
如需从关联的实例配置中移除有状态 IP 配置,请将
gcloud compute instance-groups managed instance-configs update
命令与--remove-stateful-internal-ips
或--remove-stateful-external-ips
标志结合使用:gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \ --instance INSTANCE_NAME \ --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \ --remove-stateful-external-ips NI_NAME[,NI_NAME,...] [--no-update-instance | --update-instance] \ [--instance-update-minimal-action MINIMAL_ACTION]
替换以下内容:
示例
您的应用已通过名为
example-group
的 MIG 中虚拟机实例的特定已发布静态外部 IP 地址公开给用户。您已通过在 MIG 前面部署负载均衡器并借助该负载均衡器将流量路由到代管式虚拟机来重新设计服务的架构。您不再需要保留静态外部 IP 地址,并希望将虚拟机的外部 IP 地址设为临时 IP 地址。如需将 MIG 中虚拟机的有状态外部 IP 地址设为临时 IP 地址,请为每个实例(例如
node-1
)运行以下命令:gcloud compute instance-groups managed instance-configs update example-group \ --instance node-1 \ --remove-stateful-external-ips nic0 \ --update-instance
该命令将执行以下操作:
REST
如需从关联的实例配置中移除有状态 IP 配置,请使用
instanceGroupManagers.patchPerInstanceConfigs
方法或regionInstanceGroupManagers.patchPerInstanceConfigs
方法:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME", "preservedState" : { "internalIPs": { "NI_NAME" : null }, "externalIPs": { "NI_NAME" : null } }, "fingerprint: "FINGERPRINT" }, ... ] }
替换以下内容:
patchPerInstanceConfigs
方法会更新指定的实例配置,但不会将配置更新应用于关联的代管式实例。当系统指示 MIG 重新创建或更新实例时,更改会应用于实例。您可以手动应用更新以将更改应用于实例。示例
您的应用已通过名为
example-group
的 MIG 中虚拟机实例的特定已发布静态外部 IP 地址公开给用户。您已通过在 MIG 前面部署负载均衡器并借助该负载均衡器将流量路由到代管式虚拟机来重新设计服务的架构。您不再需要保留静态外部 IP 地址,并希望将虚拟机的外部 IP 地址设为临时 IP 地址。如需将 MIG 中虚拟机的有状态外部 IP 地址设为临时 IP 地址,请为每个实例(例如
node-1
)运行以下方法,并为网络接口的有状态配置提供null
值:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "node-1", "preservedState" : { "externalIPs": { "nic0" : null } } } ] }
该方法会从
node-1
的个别实例配置中移除nic0
网络接口内有状态 IP 地址的配置。配置更新尚未应用于node-1
虚拟机实例。MIG 会在下次重新创建或更新实例时应用配置更新。如需将实例配置更新应用于
node-1
虚拟机实例,请为该实例运行regionInstanceGroupManagers.applyUpdatesToInstances
方法:POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/applyUpdatesToInstances { "instances": ["/zones/us-east1-c/instances/node-1"] }
MIG 会从
node-1
实例的preservedStateFromConfig
字段中移除对静态 IP 预留的引用,并将 IP 地址视为临时 IP 地址。MIG 会在后续实例重新创建、更新或自动修复事件时自动分配外部 IP。移除有状态配置
如需从 MIG 中的所有虚拟机的有状态政策中移除配置,请参阅以下文档:
如需从 MIG 中的特定虚拟机的实例配置中移除配置,请参阅以下文档:
清理未使用的静态 IP 地址
在为实例组中的代管式实例配置有状态 IP 地址时,您可以选择永久删除实例后是手动还是自动释放关联的静态 IP 地址预留。
如果您已指示 MIG 永不删除关联的 IP 预留,则在相应的实例或 MIG 不再存在后,静态 IP 地址仍会预留。
反馈
我们希望了解有关有状态 MIG 的用例、挑战和反馈。您可以通过 mig-discuss@google.com 向我们的团队提供您的反馈。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。
-