在 MIG 中設定有狀態 IP 位址

代管執行個體群組 (MIG) 中設定有狀態 IP 位址,可確保群組中的 VM 執行個體在自動修復、更新及重新建立時,IP 位址不會變更。

您可以保留內部和外部 IPv4 位址。您可以設定自動指派 IP 位址,也可以為 MIG 中的每個 VM 執行個體指派特定 IP 位址。

事前準備

  • 請參閱 使用有狀態 MIG 的時機,以及有狀態 MIG 的運作方式
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.

    Terraform

    如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

      安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI

      Create local authentication credentials for your user account:

      gcloud auth application-default login

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    詳情請參閱 Set up authentication for a local development environment

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI

    詳情請參閱 Trusted Cloud 驗證說明文件中的「Authenticate for using REST」。

限制

具有具狀態 IP 位址的 MIG 有下列限制:

  • 系統不支援 IPv6 位址。

  • 如果網路沒有子網路 (例如舊版網路),則不支援內部 IP 位址。

具有有狀態設定的 MIG (即有狀態的 MIG) 具有下列限制:

  • 如果 MIG 具有有狀態的設定,則無法使用自動調度資源功能。
  • 如要使用自動輪替更新,請將替換方法設為 RECREATE
  • 對於有狀態的地區 MIG,您必須停用主動式重新分配功能 (將重新分配類型設為 NONE),才能防止系統自動跨區域重新分配,進而刪除有狀態的執行個體。
  • 如果您使用所有執行個體通用的設定來覆寫執行個體範本屬性,就無法在任何個別執行個體設定中指定這些屬性,也無法同時在群組的所有執行個體通用設定中指定這些屬性。

定價

系統會依據網路定價向您收取外部 IP 位址的費用。

有狀態 IP 位址的使用時機

在下列情況下,保留執行個體的 IP 位址相當實用:

  • 應用程式需要指派 IP 位址後維持靜態,例如 Kafka。
  • 應用程式的設定取決於特定 IP 位址,例如 DNS 伺服器。
  • 使用者 (包括其他應用程式) 會透過專屬靜態 IP 位址存取伺服器,例如檔案伺服器。
  • 您需要遷移現有工作負載,但不想變更網路設定。

為群組中的所有 VM 設定具狀態的 IP 位址

在下列情況中,為 MIG 中的所有 VM 設定有狀態的 IP 位址會相當實用:

  • 應用程式需要 IP 位址在指派後維持靜態。但您的應用程式不需要為特定執行個體指派特定 IP 位址。建立執行個體時,系統可以自動指派 IP 位址。
  • 使用者 (包括其他應用程式) 會透過您在部署應用程式後發布的靜態 IP 位址存取伺服器。
  • 您希望在保留執行個體建立時自動指派的靜態 IP 位址的同時,享有執行個體自動修復和自動更新的優點。

如要為群組中現有和未來的 VM 執行個體保留靜態內部或外部 IP 位址,請在具狀態政策中進行設定。

將有狀態的 IP 位址設定新增至群組的有狀態政策後,MIG 會以以下方式套用設定:

  • 對於新執行個體,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"
      }
    ]
    

如要預留靜態 IP 位址,MIG 會建立 Address 資源。

在建立 MIG 時設定有狀態的 IP 位址

使用 Trusted Cloud 控制台、gcloud CLI、Terraform 或 REST。

主控台

  1. 前往 Trusted Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 選取您的專案並點選 [繼續]

  3. 點選「建立執行個體群組」

  4. 選取「New managed instance group (stateful)」(新增代管執行個體群組 (有狀態))

  5. 指定執行個體群組的 [名稱]

  6. 選取「執行個體範本」

  7. 在「Number of instances」(執行個體數) 底下,指定您希望這個代管執行個體群組包含的執行個體數。

  8. 在「Stateful configuration」(具狀態設定) 下,展開「External IP」(外部 IP) 和「Internal IP」(內部 IP) 區段,將這些 IP 位址類型設為具狀態。

    1. 在「Stateful」(有狀態) 部分,選取「Yes」(是)
    2. 在「On permanent instance deletion」(永久刪除執行個體時) 清單中,選取要對 VM 執行個體刪除時的有狀態 IP 位址執行的動作。可用的選項如下:
      • 卸離 IP:(預設) 在刪除執行個體時取消指派位址,並保留該位址。
      • 刪除 IP:當執行個體從執行個體群組中永久刪除時,刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。
    3. 完成有狀態設定後,按一下「完成」
  9. 點選「建立」

gcloud

建立 MIG 時,如要指定執行個體範本中網路介面的哪些 IP 位址應為有狀態,請搭配 gcloud compute instance-groups managed create 指令使用一或多個下列旗標:

  • --stateful-internal-ip,將特定網路介面的內部 IP 位址標示為具狀態。
  • --stateful-external-ip,將特定網路介面的外部 IP 位址標示為有狀態。
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]

更改下列內容:

  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。
  • INSTANCE_TEMPLATE:建立新執行個體時要使用的執行個體範本名稱。
  • SIZE:這個群組中所需的執行個體初始數量。
  • NI_NAME:(選用)。網路介面名稱。如未提供,則必須使用 enabled 選項,且系統預設會採用名為 nic0 的主要網路介面。如果您有多個網路介面,可以為每個網路介面中的每個 IP 指定這個旗標。
  • DELETE_RULE:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • never:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要為預設和自訂網路建立具有靜態內部 IP 位址的 VM 執行個體區域群組,並僅為預設網路建立靜態外部 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

nic0nic1 網路介面中的內部 IP,以及 nic0 網路介面中的外部 IP,都會設為群組中所有執行個體的有狀態 IP。群組會自動為每個執行個體預留靜態內部和外部 IP 位址。由於 auto-delete 旗標設為 on-permanent-instance-deletion,因此刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。

如要確認 nic0nic1 網路介面中的內部 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
...

您可以看到,群組的有狀態政策會在 nic0nic1 網路介面中宣告內部 IP,並在 nic0 網路介面中宣告外部 IP 為有狀態,且在永久刪除執行個體時,會根據規則刪除靜態 IP 預留項目。

Terraform

如果您尚未建立執行個體範本,指定 MIG 中每個 VM 要使用的機型、開機磁碟映像檔、網路和其他 VM 屬性,請建立執行個體範本

建立 MIG 時,如要指定執行個體範本中網路介面內的哪些 IP 位址應為有狀態,請使用下列一或多個區塊:

  • stateful_internal_ip,將特定網路介面的內部 IP 位址標示為有狀態。
  • stateful_external_ip,將指定網路介面的外部 IP 位址標示為有狀態。

以下範例會在建立區域 MIG 時,設定有狀態的 IP 位址。如要進一步瞭解範例中使用的資源,請參閱 google_compute_region_instance_group_manager 資源

resource "google_compute_region_instance_group_manager" "default" {
  name               = "example-group"
  base_instance_name = "node"
  target_size        = 3
  region             = "us-east1"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  update_policy {
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  stateful_internal_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_internal_ip {
    interface_name = "nic1"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_external_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

REST

建立 MIG 時,如要指定執行個體範本中網路介面內的哪些 IP 位址應為具狀態,請將這些位址納入 instanceGroupManagers.insertregionInstanceGroupManagers.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"
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則為群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • NAME:要建立的 MIG 名稱。
  • INSTANCE_TEMPLATE:建立新執行個體時要使用的執行個體範本名稱。
  • SIZE:這個群組中所需的執行個體初始數量。
  • NI_NAME:(選用)。網路介面名稱。如未提供,則必須使用 enabled 選項,且系統預設會採用名為 nic0 的主要網路介面。如果您有多個網路介面,可以指定多個 NI_NAMES
  • DELETE_RULE:(選用) 規定永久刪除 VM 執行個體時,應如何處理相關聯的靜態 Address 資源。可用的選項如下:

    • NEVER:(預設) 永不刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要為預設和自訂網路建立具有靜態內部 IP 位址的 VM 執行個體區域群組,並僅為預設網路建立靜態外部 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"
  }
}

nic0nic1 網路介面中的內部 IP,以及 nic0 網路介面中的外部 IP,都會設為群組中所有執行個體的有狀態 IP。群組會自動為每個執行個體預留靜態內部和外部 IP 位址。由於 auto-delete 欄位設為 ON_PERMANENT_INSTANCE_DELETION,因此當您刪除相關聯的執行個體或整個群組時,群組會自動刪除靜態 IP 位址預留項目。

使用 regionInstanceGroupManagers.get 方法,確認 nic0nic1 網路介面中的內部 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" }
      }
    }
  }
  ...
}

您可以看到,群組的有狀態政策會在 nic0nic1 網路介面中宣告內部 IP,並在 nic0 網路介面中宣告外部 IP 為有狀態,且規則是在永久刪除執行個體時,刪除相關聯的靜態 IP 位址預留項目。

在現有 MIG 中設定及更新 IP 位址的有狀態設定

如果您在無狀態 MIG (沒有任何有狀態設定的 MIG) 上執行工作負載,且工作負載需要靜態 IP 位址,您可以將已指派給受管理 VM 執行個體的 IP 位址設為有狀態。這樣一來,在執行個體自動修復、更新和重新建立事件時,現有 VM 的 IP 位址就會保留。您也可以在刪除執行個體後,選擇保留靜態 IP 位址預留項目。

為現有 MIG 中的 IP 位址設定有狀態政策,即可執行下列操作:

  • 將群組中所有現有和日後新增的執行個體,都設為具備狀態的 IP 位址。這會將所有現有執行個體的對應臨時 IP 位址升級為靜態 IP 位址。
  • 更新現有的 IP 位址有狀態設定。

MIG 會自動將有狀態政策中的更新設定,非同步套用至所有執行個體。更新有狀態政策中的 IP 位址設定時,不會中斷執行中的 VM 執行個體。詳情請參閱套用有狀態政策更新

主控台

  1. 前往 Trusted Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 按一下要指定具狀態 IP 位址的執行個體群組名稱。

  3. 按一下「編輯」,修改代管執行個體群組。

  4. 按一下「具狀態和每個執行個體的設定」,展開該部分。

  5. 在「Group config」(群組設定) 區段中,按一下要設為有狀態的「External IP」(外部 IP) 和「Internal IP」(內部 IP)

    1. 在「Stateful」(有狀態) 部分,選取「Yes」(是)
    2. 在「On permanent instance deletion」(永久刪除執行個體時) 清單中,選取要對 VM 執行個體刪除時的有狀態 IP 位址執行的動作。可用的選項如下:
      • 卸離 IP:(預設) 在刪除執行個體時取消指派位址,並保留該位址。
      • 刪除 IP:從執行個體群組永久刪除執行個體時,刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。
    3. 更新有狀態設定後,按一下「完成」
    4. 按一下「儲存」即可完成更新。

gcloud

如要指定哪些 IP 位址應為具狀態,或更新現有 MIG 的具狀態 IP 設定,請搭配 gcloud compute instance-groups managed update 指令使用一或多個 --stateful-internal-ip--stateful-external-ip 旗標。

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]

更改下列內容:

  • INSTANCE_GROUP_NAME:要更新的 MIG 名稱。
  • NI_NAME:(選用)。網路介面名稱。如未提供,則必須使用 enabled 選項,且系統預設會採用名為 nic0 的主要網路介面。如果您有多個網路介面,可以為每個網路介面中的每個 IP 指定這個旗標。
  • DELETE_RULE:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • never:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

如果指定 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 位址預留項目,並在刪除執行個體時保留這些項目。

如要確認有狀態外部 IP 已在有狀態政策中設定,請執行 gcloud compute instance-groups managed describe example-fs-group 指令

REST

如要指定應為有狀態的 IP 位址,或更新現有 MIG 的有狀態 IP 設定,請使用 instanceGroupManagers.patchregionInstanceGroupManagers.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" }
      }
    }
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則為群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • NAME:要建立的 MIG 名稱。
  • NI_NAME:(必填) 網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES
  • DELETE_RULE:(選用) 規定永久刪除 VM 執行個體時,應如何處理相關聯的靜態 Address 資源。可用的選項如下:

    • NEVER:(預設) 永不刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

如果指定 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 位址為臨時位址。

從具狀態政策中移除具狀態 IP 設定時,MIG 會自動從群組中所有執行個體的保留狀態中,非同步移除 IP 位址。這項操作不會中斷正在執行的 VM 執行個體。IP 位址在執行個體上仍處於有效狀態,但不再具備狀態。重新建立或更新執行個體,或是自動修復執行個體時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果您不再需要保留靜態外部 IP 位址,現在可以釋出這些位址。

詳情請參閱下列文件:

主控台

  1. 前往 Trusted Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 按一下要移除 IP 位址有狀態設定的執行個體群組名稱。

  3. 按一下「編輯」,修改代管執行個體群組。

  4. 按一下「具狀態和每個執行個體的設定」,展開該部分。

  5. 在「Group config」(群組設定) 區段中,展開要設為無狀態的「External IP」(外部 IP) 和「Internal」(內部) IP。

    1. 將「Stateful」選項變更為「No」
    2. 按一下 [完成]
  6. 完成變更後,按一下「儲存」

gcloud

如要指定要將 MIG 具狀態政策中的哪些 IP 位址設為臨時,請搭配 gcloud compute instance-groups managed update 指令使用 --remove-stateful-internal-ips--remove-stateful-external-ips 旗標:

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,...]

更改下列內容:

  • INSTANCE_GROUP_NAME:要更新的 MIG 名稱。
  • NI_NAME:(必填)。網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES

如要將名為 nic0 的預設主要網路介面中的具狀態 IP 位址,變更為臨時 IP 位址,也可以使用下列指令:

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --stateful-internal-ip disabled \
    --stateful-external-ip disabled

示例

您的應用程式已透過 MIG 中 VM 執行個體發布的靜態外部 IP 位址,向使用者公開。MIG 名為 example-group。您已部署負載平衡器,並將流量透過負載平衡器轉送至代管 VM,重新架構服務。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要讓 MIG 中 VM 的具狀態外部 IP 位址成為暫時性,請執行下列指令:

gcloud compute instance-groups managed update example-group \
    --remove-stateful-external-ips nic0

MIG 會自動從群組中所有執行個體的保留狀態,非同步移除 nic0 網路介面的靜態外部 IP 位址。外部 IP 位址在執行個體上仍處於有效狀態,但不再具備狀態。當您重建或更新執行個體,或是執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址,並自動指派臨時位址。如果不再需要保留靜態外部 IP 位址,現在可以釋出這些位址。

REST

如要指定要將 MIG 狀態化政策中的哪些 IP 位址設為暫時性,請使用 instanceGroupManagers.patchregionInstanceGroupManagers.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
      }
    }
  }
}

更改下列內容:

  • PROJECT:要求的專案 ID。
  • REGION:如果是區域 MIG,則為群組所在的區域。如果是區域 MIG,請將 regions/REGION 替換為 zones/ZONE,並指定 MIG 所在的區域。
  • INSTANCE_GROUP_NAME:要建立的 MIG 名稱。
  • NI_NAME:(必填) 網路介面名稱。主要網路介面名稱為 nic0。如果您有多個網路介面,可以指定多個 NI_NAMES

示例

應用程式已透過 MIG (稱為 example-group) 中 VM 執行個體發布的靜態外部 IP 位址,向使用者公開。您已重新架構服務,在 MIG 前方部署負載平衡器,並透過該負載平衡器將流量轉送至代管 VM。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要將 MIG 中 VM 的具狀態外部 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 中的 VM 個別設定有狀態的 IP 位址

在下列情況中,為 MIG 中的 VM 個別設定有狀態的 IP 位址很有用:

  • 將現有工作負載 (包括現有預留靜態 IP 位址) 從獨立 VM 執行個體遷移至有狀態 MIG,以享有自動修復和自動更新功能。
  • 指派架構或工作負載設定所需的特定預留靜態 IP 位址。

在 MIG 中建立 VM 時設定靜態 IP 位址

在 MIG 中個別建立執行個體時,您可以保留靜態 IP 位址並指派給特定執行個體。如果架構、設定或使用者依賴特定靜態 IP 位址,這項功能就非常實用,可將有狀態的應用程式從現有獨立 VM 遷移至有狀態的 MIG。

在 MIG 中手動建立執行個體並提供靜態 IP 位址時,MIG 會執行下列動作:

  1. 如果提供的 IP 位址尚不存在,則會為這些位址建立靜態內部外部 IP 位址預留項目。
  2. 使用提供的執行個體名稱和 IP 位址,從執行個體範本建立執行個體。
  3. 使用提供的 IP 位址有狀態設定,建立每個執行個體的設定

gcloud

如要使用預先定義的靜態 IP 位址建立執行個體,請使用 gcloud compute instance-groups managed create-instance 指令搭配下列一或多個旗標:

  • --stateful-internal-ip,為特定網路介面設定靜態內部 IP 位址。
  • --stateful-external-ip,為指定網路介面設定靜態外部 IP 位址。
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]

更改下列內容:

  • 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 會將預留項目指派給執行個體。
  • DELETE_RULE:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • never:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • on-permanent-instance-deletion:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要在名為 proxy-cluster 的 MIG 上執行的 Proxy 伺服器叢集中,再新增一個 VM 執行個體。您已建立名為 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 的執行個體,將提供的靜態內部 IP 位址 (名為 proxy-node-03-ip) 指派給該執行個體,並將 IP 的具狀態設定儲存在對應的每個執行個體設定中。 由於 auto-delete 旗標設為 never,因此即使您稍後刪除執行個體,系統仍會保留 IP。

Terraform

如要建立使用預先定義靜態 IP 位址的 VM,請使用下列一或多個區塊:

  • preserved_state.internal_ip,將特定網路介面的內部 IP 位址標示為具狀態。
  • preserved_state.external_ip,將特定網路介面的外部 IP 位址標示為有狀態。

以下範例會在區域 MIG 中建立 VM 時設定靜態 IP 位址。如要進一步瞭解範例中使用的資源,請參閱 google_compute_region_per_instance_config 資源。如果是區域 MIG,請使用 google_compute_per_instance_config 資源

resource "google_compute_region_per_instance_config" "default" {
  region_instance_group_manager = google_compute_region_instance_group_manager.default.name
  region                        = google_compute_region_instance_group_manager.default.region
  name                          = "proxy-node-03-ip"
  preserved_state {
    internal_ip {
      interface_name = "nic0"
      auto_delete    = "NEVER"
      ip_address {
        address = google_compute_address.default.id
      }
    }
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

REST

如要在 MIG 中建立一或多個執行個體、設定自訂執行個體名稱,並將預先定義的靜態 IP 位址指派給這些執行個體,請使用 instanceGroupManagers.createInstancesregionInstanceGroupManagers.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"
          },
          ...
        },
        ...
      }
    },
    ...
  ]
}

更改下列內容:

  • 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 位址時,您一次只能設定一個欄位,也就是 addressliteral
  • LITERAL:(選用)。要指派給執行個體的靜態 IP 位址,格式為字面值,例如 "130.211.181.55"。指派靜態 IP 位址時,您一次只能設定一個欄位,且必須設定一個欄位,也就是 addressliteral
    • 如果提供的 IP 位址尚未預留,MIG 會自動建立相應的 IP 位址預留項目。
    • 如果提供的 IP 位址是保留位址,MIG 會將保留位址指派給執行個體。
  • DELETE_RULE:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • NEVER:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

示例

您需要在名為 proxy-cluster 的 MIG 上執行的 Proxy 伺服器叢集中,再新增一個 VM 執行個體。您已建立名為 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 的執行個體,將提供的靜態內部 IP 位址 (名為 proxy-node-03-ip) 指派給該執行個體,並將 IP 的具狀態設定儲存在對應的每個執行個體設定中。 由於 autoDelete 欄位設為 NEVER,因此即使您稍後刪除執行個體,系統仍會保留 IP。

為 MIG 中現有的 VM 設定靜態 IP 位址

您可以設定預先定義的靜態 IP 位址,或個別更新受管理執行個體的有狀態 IP 設定,例如:

  • 將靜態 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 中的 VM 執行個體個別設定具狀態 IP 位址,請在相關聯的每個執行個體設定中新增或更新具狀態 IP 設定。

如果執行個體尚未有執行個體專屬設定,請使用 gcloud compute instance-groups managed instance-configs create 指令搭配下列一或多個旗標:

  • --stateful-internal-ip,為特定網路介面設定靜態內部 IP 位址。
  • --stateful-external-ip,為指定網路介面設定靜態外部 IP 位址。
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]

更改下列內容:

  • 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 會將預留項目指派給執行個體。
    • 如果執行個體的個別執行個體設定中已定義位址,則這個子旗標為選用。否則為必填。
    • 如果省略,設定的地址會維持不變。
  • DELETE_RULE:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • 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 的檔案伺服器執行個體,這是名為 fs-group 的具狀態 MIG 中的單一執行個體。群組具有對應的每個執行個體設定,其中設定了有狀態資料磁碟。檔案伺服器只能在內部存取,但現在有使用者需要透過靜態 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

這項指令會執行以下作業:

  1. 更新 file-server 執行個體的個別執行個體設定:
    1. 新增具狀態的外部 IP 設定,指向 file-server-ip 位址預留項目。
    2. 維持現有的有狀態資料磁碟設定。
  2. 由於包含 --update-instance 標記,因此系統會立即將個別執行個體設定更新套用至 file-server 執行個體:重新整理執行個體,並從 file-server-ip 預留項目指派靜態外部 IP 位址。

REST

如要為 MIG 中的 VM 執行個體個別設定具狀態 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"
    },
    ...
  ]
}

更改下列內容:

  • 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:(選用)。規定永久刪除 VM 執行個體時,相關聯的靜態位址資源應如何處理。可用的選項如下:

    • NEVER:(預設值)。請勿刪除靜態 IP 位址。請改為在刪除執行個體時取消指派位址,並保留位址。
    • ON_PERMANENT_INSTANCE_DELETION:從執行個體群組永久刪除執行個體時,請刪除靜態 IP 位址預留項目,例如手動刪除執行個體或縮減群組大小時。
    • 如果省略,系統會為新的有狀態 IP 設定預設值;現有設定中的值則維持不變。

    無論刪除規則的值為何,群組一律會在執行個體自動修復、更新和重新建立作業時保留有狀態 IP 位址。

  • FINGERPRINT:(選用)。如果指定設定已有指紋,則會傳回該指紋。用於樂觀鎖定。如果指紋與提供的指紋不同,作業就會失敗,因為這表示自上次讀取以來,每個執行個體的設定都已變更。如要查看最新指紋,請參閱區域可用區 MIG 的 listPerInstanceConfigs 方法輸出內容。如果省略 fingerprint,作業會繼續進行,但不會比較指紋。

updatePerInstanceConfigspatchPerInstanceConfigs 方法會更新指定的個別執行個體設定,但不會將設定更新套用至相關聯的代管執行個體。當系統指示 MIG 重新建立或更新執行個體時,變更就會套用至執行個體。您可以手動套用更新,將變更套用至執行個體。

示例

您有一個名為 file-server 的檔案伺服器執行個體,這是名為 fs-group 的具狀態 MIG 中的單一執行個體。群組具有對應的每個執行個體設定,其中設定了有狀態資料磁碟。檔案伺服器只能在內部存取,但現在有使用者需要透過靜態 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 執行個體的個別設定:

  1. 新增有狀態的外部 IP 設定,指向 file-server-ip 位址預留項目。
  2. 維持現有的有狀態資料磁碟設定。

設定更新尚未套用至 file-server VM 執行個體。稍後重新建立執行個體或將更新套用至執行個體時,MIG 就會套用設定更新。

如要將個別執行個體設定更新套用至 file-server VM 執行個體,請針對該執行個體呼叫 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"]
}

這個方法會將file-server-ip預留設定的靜態外部 IP 位址指派給受管理執行個體。這個方法會重新整理 file-server 執行個體,指派外部 IP 位址。

由於 autoDelete 在具備狀態的 IP 設定中設為 NEVER,因此即使您稍後刪除執行個體,IP 仍會保留。

從 MIG 中現有的 VM 取消靜態 IP 位址的關聯

您可能需要取消現有 VM 的靜態 IP 位址關聯,讓 VM 的網路介面成為臨時介面。這項功能在下列情況中相當實用:

  • 重新設計應用程式架構,不再依賴靜態 IP 位址。
  • 您誤將 IP 設定為有狀態,現在想要還原。

您可以從 MIG 中的現有 VM 取消關聯靜態 IP 位址,並從相關聯的每個執行個體設定中移除 IP 的具狀態設定,或刪除整個每個執行個體設定 (如果其中不含任何其他狀態),將 IP 位址設為個別 VM 的臨時 IP 位址。套用變更會產生下列影響:

  • IP 位址在執行個體上仍處於有效狀態,但不再具備狀態。
  • 當您重新建立或更新執行個體,或是執行個體自動修復時,MIG 會取消指派相關聯的靜態 IP 位址預留項目,並自動指派臨時位址。
  • 解除指派後,系統仍會保留靜態 IP 位址。

從每個執行個體設定中移除具狀態 IP 設定,不會中斷執行中的 VM 執行個體,除非您明確選擇這麼做。

詳情請參閱下列文件:

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]

更改下列內容:

  • 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:重新建立執行個體。

    如果省略這個值,系統會使用更新作業所需的干擾程度最低動作。

示例

您的應用程式已透過 MIG 中 VM 執行個體的特定已發布靜態外部 IP 位址,向使用者公開。MIG 名稱為 example-group。您已在 MIG 前方部署負載平衡器,並透過該負載平衡器將流量轉送至代管 VM,重新架構服務。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要將 MIG 中 VM 的具狀態外部 IP 位址設為臨時位址,請為每個執行個體執行下列指令,例如 node-1

gcloud compute instance-groups managed instance-configs update example-group \
    --instance node-1 \
    --remove-stateful-external-ips nic0 \
    --update-instance

這項指令會執行以下作業:

  1. node-1 的每個執行個體設定中,移除 nic0 網路介面內外部 IP 位址的有狀態設定。
  2. 由於包含 --update-instance 旗標,因此系統會立即將個別執行個體設定更新套用至 node-1 VM 執行個體。VM 執行個體不會中斷,且會繼續透過相同的 IP 提供服務,但該 IP 不再具有狀態。MIG 會從受管理執行個體的 preservedStateFromConfig 中移除靜態 IP 保留項目的參照,並將外部 IP 位址視為臨時位址。後續執行個體重建、更新或自動修復事件發生時,MIG 會自動指派外部 IP。
  3. 取消指派後,系統仍會保留原始靜態 IP。如果不再需要 IP 位址,可以釋出該位址。

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"
    },
    ...
  ]
}

更改下列內容:

  • 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,作業會繼續進行,但不會比較指紋。

patchPerInstanceConfigs 方法會更新指定的每個執行個體設定,但不會將設定更新套用至相關聯的受管理執行個體。當系統指示 MIG 重新建立或更新執行個體時,變更就會套用至執行個體。您可以手動套用更新,將變更套用至執行個體。

示例

您的應用程式已透過 MIG 中 VM 執行個體的特定已發布靜態外部 IP 位址,向使用者公開,該 MIG 稱為 example-group。您已重新設計服務架構,在 MIG 前端部署負載平衡器,並透過該負載平衡器將流量轉送至受管理 VM。您不再需要維護靜態外部 IP 位址,並希望將 VM 的外部 IP 位址設為臨時。

如要將 MIG 中 VM 的具狀態外部 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 VM 執行個體。MIG 會在下次重新建立或更新執行個體時,套用設定更新。

如要將個別執行個體設定更新套用至 node-1 VM 執行個體,請對該執行個體執行 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 位址視為臨時位址。在後續的執行個體重建、更新或自動修復事件中,MIG 會自動指派外部 IP。

取消指派後,系統仍會保留原始靜態 IP。如果不再需要 IP 位址,可以釋出該位址。

移除有狀態設定

如要從 MIG 中所有 VM 的具狀態政策移除設定,請參閱下列文件:

如要從 MIG 中特定 VM 的個別執行個體設定移除設定,請參閱下列文件:

清除未使用的靜態 IP 位址

為群組中的代管執行個體設定具狀態的 IP 位址時,您可以選擇在永久刪除執行個體時,手動或自動釋放相關聯的靜態 IP 位址預留項目:

  • 如要在永久刪除執行個體時自動釋出靜態 IP 位址預留項目,請將 autoDelete 參數設為 ON_PERMANENT_INSTANCE_DELETION
  • 如要手動釋出預留的靜態 IP 位址,請將 autoDelete 參數設為 NEVER。如要清除未使用的靜態 IP 位址預留設定,例如避免不必要的費用,請參閱下列文件:

如果您已指示 MIG 永不刪除相關聯的 IP 預留項目,則在對應的執行個體或 MIG 不再存在後,靜態 IP 位址仍會保留。

意見回饋

我們想要瞭解您的用途、難題和有關有狀態 MIG 的意見。請前往以下網址,並與我們的團隊分享您的寶貴意見:mig-discuss@google.com

後續步驟