設定靜態內部 IP 位址


本頁面說明如何為 Compute Engine 虛擬機器 (VM) 和裸機執行個體設定及管理靜態內部 IPv4 或 IPv6 位址。

如果執行個體需要不變的固定內部 IP 位址,您可以透過下列其中一個選項為該執行個體取得靜態內部 IP 位址:

如要瞭解如何管理次要內部 IP 位址,請參閱別名 IP 範圍

Compute Engine 的所有 VM 執行個體皆擁有多個網路介面,而每個介面皆可有一個外部 IP 位址、一個主要內部 IP 位址,以及一或多個次要內部 IP 位址。如要進一步瞭解 IP 位址,請參閱 IP 位址說明文件。

使用靜態內部 IP 位址後,即使您必須刪除並重新建立 VM,也能為 VM 一律使用同一個 IP 位址。

如要設定靜態外部 IP 位址而非內部 IP 位址,請參閱設定靜態外部 IP 位址

事前準備

  • 瞭解 IP 位址
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 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

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. Terraform

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

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. 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.

          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 的憑證。

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

必要的角色

如要取得設定及管理靜態 IP 位址所需的權限,請要求管理員將專案的下列 IAM 角色授予您:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色具備設定及管理靜態 IP 位址所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要設定及管理靜態 IP 位址,您必須具備下列權限:

  • VM 執行個體的 compute.instances.update 權限
  • VM 執行個體的 compute.instances.updateNetworkInterface 權限
  • VM 執行個體的 compute.instances.addAccessConfig 權限
  • VM 執行個體的 compute.instances.deleteAccessConfig 權限
  • compute.networks.list 網路上的裝置
  • 子網路上的 compute.subnetworks.use
  • 子網路上 compute.subnetworks.list
  • 如要建立 VM,請按照下列步驟操作:
    • 專案的 compute.instances.create 權限
    • 如要使用自訂映像檔建立 VM,請按一下映像檔上的 compute.images.useReadOnly
    • 如要使用快照建立 VM,請按一下快照上的 compute.snapshots.useReadOnly
    • 如要使用執行個體範本建立 VM,請按一下執行個體範本上的 compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給 VM:專案的 compute.networks.use
    • 如要為 VM 指定靜態 IP 位址,請在專案中擁有 compute.addresses.use 權限
    • 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中設定 compute.networks.useExternalIp
    • 為 VM 指定子網路:專案或所選子網路的 compute.subnetworks.use
    • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有 compute.subnetworks.useExternalIp 權限
    • 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:compute.instances.setMetadata
    • 如要為 VM 設定標記,請在 VM 上按一下 compute.instances.setTags
    • 如要為 VM 設定標籤,請在 VM 上執行下列步驟:compute.instances.setLabels
    • 如要設定 VM 使用的服務帳戶,請在 VM 上執行 compute.instances.setServiceAccount
    • 如要為 VM 建立新磁碟,請取得專案的 compute.disks.create 權限
    • 如要以唯讀或讀寫模式連接現有磁碟,請對磁碟擁有 compute.disks.use 權限
    • 如要以唯讀模式連接現有磁碟,請對磁碟擁有 compute.disks.useReadOnly 權限

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

限制

  • 您可保留的靜態內部 IP 位址數量不得超過專案配額。詳情請參閱虛擬私有雲說明文件中的專案配額

  • 同時間只有一個資源可以使用靜態內部 IP 位址。

  • 保留靜態內部 IP 位址的功能僅支援虛擬私有雲 (VPC) 網路,不支援舊版模式的網路。

  • 刪除資源並不會自動釋出靜態內部 IP 位址。因此,您不再需要靜態內部 IP 位址時,請以手動方式釋出。

  • 每個 VM 都可以有多個網路介面,且每個介面可根據堆疊類型指派下列 IP 位址:

    • 僅限 IPv4 的介面:
      • 內部 IPv4 位址 (必要)
      • 外部 IPv4 位址 (選用)
    • 雙重堆疊 (IPv4 和 IPv6) 介面:
      • 內部 IPv4 位址 (必要)
      • 外部 IPv4 位址 (選用)
      • /96 IPv6 位址範圍 (內部或外部,但不能同時使用兩者) (必要)
    • 僅限 IPv6 的介面 (搶先版):
      • /96 IPv6 位址範圍 (內部或外部,但不能同時使用兩者) (必要)
  • 您無法取消指派或變更下列項目:

    • 現有資源的內部 IPv4 位址。舉例來說,您無法將新的靜態內部 IP 位址指派給執行中或已停止的 VM 執行個體。
    • 僅含 IPv6 網路介面的 VM 內部 IPv6 位址。

    不過,您可以將資源的臨時內部 IP 位址升級為靜態內部 IP 位址,這樣即使資源遭到刪除,您仍可保留該位址。

  • 您無法變更靜態 IP 位址的名稱。

  • 靜態內部 IP 位址屬於區域資源,因此只能在保留的區域中使用。舉例來說,如果 Region A 中有預留的靜態內部 IP 位址,您只能在 Region A 中使用該 IP 位址。

如何設定靜態內部 IP 位址

您可以保留靜態內部 IP 位址,然後在建立執行個體時指定保留的位址。您也可以使用臨時內部 IP 位址建立 VM,然後再將該臨時 IP 位址升級為靜態內部 IP 位址。

專案必須要有 VPC 網路,您才能使用靜態內部 IP 位址。如要查看專案中的虛擬私有雲網路,請參閱「查看虛擬私有雲網路」。

保留靜態內部 IPv4 或 IPv6 位址,然後將該位址與特定 VM 建立關聯

這種方式可分別保留靜態內部 IP 位址,然後指派給執行個體:

  1. 在 VPC 網路中選擇子網路。如果是 IPv6 位址,請確認是具有內部 IPv6 位址範圍的子網路。

  2. 從子網路的主要 IP 範圍保留內部 IP 位址。這個步驟會建立具名的內部 IP 位址資源,其中包含特定的內部 IP 位址。保留 IP 位址可防止 Google Cloud 自動將該位址分配為臨時位址。

  3. 建立 VM 資源時,建立保留的內部 IP 位址與執行個體的關聯,然後您就可以使用該 IP 位址。

為執行個體指定臨時內部 IPv4 或 IPv6 位址,然後升級該位址

這種方式可將目前連結至執行個體的臨時內部 IPv4 或 IPv6 位址升級為靜態位址:

  1. 在 VPC 網路中選擇子網路。如果是 IPv6 位址,請確認這是具有 IPv6 位址範圍的子網路。

  2. 建立執行個體時,可使用自動分配的臨時 IPv4 或 IPv6 位址,也可以使用自訂的 IPv4 或 IPv6 位址。

  3. 升級臨時內部 IP 位址,使其成為靜態位址。

查看可用的靜態內部 IP 位址

如要查看所有現有的靜態內部 IP 位址,請完成下列步驟。

主控台

  1. 前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。

    前往「IP addresses」(IP 位址) 頁面

  2. 按一下「內部 IP 位址」

gcloud

使用 gcloud compute addresses list 指令

gcloud compute addresses list

API

使用 addresses.list 方法

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

更改下列內容:

  • PROJECT_ID:這項要求的專案 ID
  • REGION:這項要求的區域名稱

如要列出所有地區的所有位址,請使用 addresses.aggregatedList 方法

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses

內部 IP 位址的指派方式

系統會從執行個體連線的子網路,為執行個體的網路介面指派 IP 位址。每個僅限 IPv4 或雙重堆疊的網路介面,都有一個主要內部 IPv4 位址,這個位址是從子網路的主要 IPv4 範圍指派而來。連線至具有內部 IPv6 位址範圍的子網路時,系統會為每個僅限 IPv6 或雙重堆疊網路介面指派內部 IPv6 位址。

您可以透過下列方式指派內部 IPv4 位址:

  • Compute Engine 會自動從主要 IPv4 子網路範圍指派單一 IPv4 位址。
  • 您可以在建立執行個體時指派特定內部 IPv4 位址,也可以保留專案的靜態內部 IPv4 位址,並將該位址指派給執行個體的網路介面。

您可以透過下列方式指派內部 IPv6 位址:

  • Compute Engine 會自動從 IPv6 子網路範圍指派單一 /96 範圍。
  • 建立執行個體時,您可以從子網路的內部 IPv6 範圍指派自訂 /96 範圍,也可以從子網路的內部 IPv6 範圍保留靜態內部 IPv6 位址範圍,並指派給執行個體的網路介面。

建立資源時使用預留的靜態內部 IP 位址

保留靜態內部 IP 位址後,您可以在建立執行個體或內部負載平衡器時指派保留的位址。

下列程序說明如何建立資源時使用靜態內部 IP 位址:

使用保留的內部 IPv4 或 IPv6 位址建立執行個體

建立連線至雙重堆疊或僅限 IPv6 子網路的執行個體時,如果子網路具有內部 IPv6 範圍,且您未指定自訂暫時內部 IPv6 位址或保留的靜態內部 IPv6 位址,Compute Engine 會自動從子網路的 IPv6 範圍指派暫時內部 IPv6 位址給執行個體。

主控台

  1. 前往 Google Cloud 控制台的「Create a VM instance」(建立 VM 執行個體) 頁面

    前往「建立 VM 執行個體」

  2. 展開「Advanced options」(進階選項) 區段。

  3. 展開「Networking」(網路) 區段。

  4. 如要指派內部 IPv4 位址,請按照下列步驟操作:

    1. 選取網路和子網路。
    2. 從「Primary internal IPv4 address」(主要內部 IPv4 位址) 清單中,選取預留的內部 IPv4 位址。

    或者,選取「預留靜態內部 IP 位址」,並預留新的靜態內部 IPv4 位址。

  5. 如要指派內部 IPv6 位址,請按照下列步驟操作:

    1. 選取包含 IPv6 位址範圍子網路的網路。
    2. 從「子網路」清單中選取雙重堆疊或僅限 IPv6 的子網路。 子網路必須具有 INTERNAL IPv6 存取權類型。
    3. 針對「IP 堆疊類型」,選取「IPv4 和 IPv6 (雙重堆疊)」或「IPv6 (單一堆疊)」
    4. 從「Primary internal IPv6 address」(主要內部 IPv6 位址) 清單中,選取保留的內部 IPv6 位址。

    或者,選取「保留靜態內部 IPv6 位址」,並保留新的靜態內部 IPv6 位址。

  6. 如要完成修改預設網路介面,請按一下「Done」(完成)

  7. 繼續執行個體建立程序。

  8. 點選「建立」

gcloud

  • 使用 instances create 指令建立執行個體,並透過 --private-network-ip 旗標指定 IP 位址:

    gcloud compute instances create INSTANCE_NAME \
        --private-network-ip IP_ADDRESS
    

    更改下列內容:

    • INSTANCE_NAME:要建立的執行個體名稱
    • IP_ADDRESS:您要指派的 IP 位址

    如果您使用自訂子網路模式網路,則必須使用 --subnet SUBNET 參數另外指定子網路。

  • 如要使用預留的內部 IPv6 位址建立執行個體,請使用 --internal-ipv6-address 旗標指定 IP 位址:

    gcloud compute instances create INSTANCE_NAME \
        --subnet SUBNETWORK \
        --stack-type STACK_TYPE \
        --internal-ipv6-address INTERNAL_IPV6_ADDRESS \
        --zone ZONE
    

    更改下列內容:

    • INSTANCE_NAME:要建立的執行個體名稱
    • SUBNETWORK:內部 IPv6 位址的子網路
    • STACK_TYPE:執行個體的堆疊類型,可為 IPV4_IPV6IPv6_ONLY
    • INTERNAL_IPV6_ADDRESS/96 IPv6 位址、IP 位址名稱或位址資源的 URI。IP 位址必須先預留,才能使用。
    • ZONE:要建立執行個體的可用區。

REST

如要使用靜態內部 IP 位址建立執行個體,請使用 instances.insert 方法

  • 如為內部 IPv4 位址,請明確提供 networkInterfaces[].networkIP 屬性,以及要指派給執行個體的內部 IPv4 位址。

    例如:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    
    {
    "name": "INSTANCE_NAME",
    "machineType": "zones/us-central1-f/machineTypes/e2-micro",
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "network": "global/networks/default",
      "networkIP": "IPV4_ADDRESS"
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
    }

    更改下列內容:

    • PROJECT_ID:要在其中建立執行個體的專案 ID
    • ZONE:要建立執行個體的區域
    • INSTANCE_NAME:虛擬機器的名稱
    • IPV4_ADDRESS:要指派給執行個體的內部 IPv4 位址
  • 如果是內部 IPv6 位址,請明確指定下列屬性的值:

    • networkInterfaces[].stackType
    • networkInterfaces[].ipv6Address
    • networkInterfaces[].internalIpv6PrefixLength
    • networkInterfaces[].ipv6AccessType

    例如:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "INSTANCE_NAME",
    "machineType": "zones/us-central1-f/machineTypes/n4-standard-2",
    "networkInterfaces": [{
      "network": "global/networks/default",
      "stackType": "STACK_TYPE"
      "ipv6Address": "IPV6_ADDRESS",
      "internalIpv6PrefixLength": 96
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-11-bullseye-v20241009"
      }
    }]
    }

    更改下列內容:

    • PROJECT_ID:要在其中建立執行個體的專案 ID。
    • ZONE:要建立執行個體的可用區。
    • INSTANCE_NAME:執行個體的名稱。
    • STACK_TYPE:執行個體的堆疊類型,可為 IPV4_IPV6IPv6_ONLY
    • IPV6_ADDRESS:要指派給執行個體的內部 IPv6 位址。

如果您刪除具有臨時 IP 位址的執行個體,則該位址將返回到未分配的位址集區。假如您在執行個體的壽命期間過後仍需要保留內部 IP 位址,可以保留靜態內部 IP 位址

將靜態內部位址指派給執行個體的次要網路介面

建立具有多個網路介面的執行個體時,您可以為主要和次要網路介面使用預留的靜態內部 IPv4 或 IPv6 位址。

如要為次要網路介面使用靜態內部 IPv4 或 IPv6 位址,請參閱「建立具有多個網路介面的執行個體」。

變更或指派現有執行個體的內部 IPv6 位址

您可以變更或指派現有雙堆疊執行個體的內部 IPv6 位址。如果執行個體僅支援 IPv4,且您想指派 IPv6 位址,請先將堆疊類型變更為雙重堆疊。

如果執行個體已指派內部 IPv6 位址,您必須先取消指派該位址。然後使用執行個體的網路介面,將新位址指派給執行個體。

如要變更或指派現有執行個體的靜態內部 IPv6 位址,請完成下列步驟。

主控台

  1. 保留靜態內部 IPv6 位址
  2. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  3. 按一下要變更內部 IPv6 位址的執行個體名稱。

  4. 在「執行個體詳細資料」頁面上,完成下列步驟:

    1. 按一下 [編輯]
    2. 展開「網路介面」
    3. 如果執行個體僅支援 IPv4,且您想指派 IPv6 位址,請先將堆疊類型變更為雙重堆疊。
    4. 在「主要內部 IPv6 位址」清單中,執行下列其中一項操作:
      • 如要自動指派新的臨時 IPv6 位址,請選擇「臨時 (自動)」
      • 如要手動指定新的臨時 IPv6 位址,請選擇「臨時 (自訂)」
      • 如要指派現有的靜態內部 IP 位址,請從清單中選擇預留的 IPv6 位址名稱。
    5. 按一下 [完成]
  5. 按一下 [儲存]

gcloud

使用 compute instances network-interfaces update 指令

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --network-interface NIC \
    --ipv6-network-tier PREMIUM \
    --stack-type STACK_TYPE \
    --internal-ipv6-address INTERNAL_IPV6_ADDRESS \
    --zone ZONE

更改下列內容:

  • INSTANCE_NAME:要建立的執行個體名稱
  • NIC:要更新的網路介面名稱
  • STACK_TYPE:執行個體的堆疊類型,必須為 IPV4_IPV6
  • INTERNAL_IPV6_ADDRESS:要指派給介面的/96內部 IPv6 位址、IP 位址名稱或位址資源的 URI
  • ZONE:執行個體的可用區

REST

請使用 instances.update 方法。 使用要指派的內部 IPv6 位址更新 networkInterfaces[].ipv6Address 屬性。

例如:

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
  {
      ...
      "networkInterfaces": [{
          "accessConfigs": [{
              "type": "ONE_TO_ONE_NAT",
              "name": "External NAT",
          }],
          "stackType": "STACK_TYPE"
          "ipv6Address": "IPV6_ADDRESS",
          "internalIpv6PrefixLength": 96
          "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
      }],
      "disks": [{
          "autoDelete": "true",
          "boot": "true",
          "type": "PERSISTENT",
          "initializeParams": {
              "sourceImage": "projects/debian-cloud/global/images/debian-11-bullseye-v20241009"
          }
      }]
 }
 

更改下列內容:

  • PROJECT_ID:執行個體所屬專案的 ID
  • ZONE:要建立執行個體的區域
  • INSTANCE_NAME:執行個體名稱
  • STACK_TYPE:執行個體的堆疊類型,必須為 IPV4_IPV6
  • IPV6_ADDRESS:要指派給執行個體的內部 IPv6 位址

    如果您將內部 IPv6 位址資源的 URI 或 IPv6 位址範圍指定為 IPV6_ADDRESS 的值,則必須將 internalIpv6PrefixLength 的值留空。

管理靜態內部 IP 位址

您可以透過下列程序管理執行個體的靜態內部 IP 位址:

判斷內部 IPv4 或 IPv6 位址是臨時還是靜態

在大多數情況下,靜態和臨時內部 IP 位址的行為和顯示方式相同。不過,使用靜態內部 IP 位址時,即使刪除並重新建立資源,也能為相同的資源一律使用同一個 IP 位址。一般來說,如果您停止或刪除資源,系統會釋出臨時 IP 位址。

如要判斷位址是靜態還是臨時,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。

    前往「IP addresses」(IP 位址) 頁面

  2. 在清單中找到該地址,並查看「類型」欄中的 IP 位址類型。

取消指派靜態內部 IPv6 位址

如要從雙重堆疊執行個體取消指派靜態內部 IPv6 位址,請更新執行個體網路介面的堆疊類型,或刪除指派該位址的執行個體

取消指派內部 IPv6 位址時,系統會從資源中移除該位址,但會保留專案的位址。您稍後可以將地址重新指派給其他資源。

如要取消指派執行個體的靜態內部 IPv6 位址,請完成下列步驟。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 按一下要取消指派內部 IPv6 位址的執行個體名稱。

  3. 在「執行個體詳細資料」頁面上,完成下列步驟:

    1. 按一下 [編輯]
    2. 展開「網路介面」
    3. 在「IP 堆疊類型」部分,選取「IPv4 (單一堆疊)」
    4. 按一下 [完成]
  4. 按一下 [儲存]

gcloud

使用 compute instances network-interfaces update 指令,並將 --stack-type 旗標設為 IPV4_ONLY

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --network-interface=NIC \
    --stack-type=IPV4_ONLY \
    --zone=ZONE

更改下列內容:

  • INSTANCE_NAME:要更新網路介面的執行個體名稱
  • NIC:要更新的網路介面名稱
  • ZONE:執行個體的可用區

確認您的靜態內部 IPv6 位址現可存取,且標示為 RESERVED,而非 IN_USE

gcloud compute addresses list \
    --filter="region=REGION AND name=INSTANCE_NAME"

REST

更新附加內部 IPv6 位址的網路介面執行個體堆疊類型:

  1. instances.updateNetworkInterface 方法發出 PATCH 要求。
  2. 在要求主體中,將 stackType 欄位的值更新為 IPV4_ONLY

    例如:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/updateNetworkInterface
    {
        "networkInterfaces": [{
            ...
            "stackType" : "IPV4_ONLY"
            ...
        }]
    }
    

    更改下列內容:

    • PROJECT_ID:執行個體所在的專案 ID
    • ZONE:要建立執行個體的區域
    • INSTANCE_NAME:執行個體名稱

釋出靜態內部 IP 位址

如果不再需要靜態內部 IPv4 或 IPv6 IP 位址,可以刪除 IP 位址資源來釋出 IP 位址。刪除執行個體不會自動釋出靜態外部 IP 位址。因此,您不再需要靜態外部 IP 位址時,請以手動方式釋出。

如要釋出靜態內部 IP 位址,請參閱 VPC 說明文件中的「釋出靜態內部 IPv4 或 IPv6 位址」。

後續步驟