预留静态内部 IP 地址


本页面介绍如何在虚拟私有云 (VPC) 网络中配置和管理静态内部 IPv4 或 IPv6 地址。

如果某虚拟机实例需要固定不变的内部 IP 地址,您可以通过以下任一方式为该虚拟机获取一个静态内部 IP 地址:

如需了解如何管理次要内部 IP 地址,请参阅别名 IP 地址范围

在 Compute Engine 中,每个虚拟机实例都可以有多个网络接口。每个接口可以具有一个外部 IP 地址、一个主要内部 IP 地址和一个或多个次要内部 IP 地址。转发规则可以将外部 IP 地址用于外部负载均衡,或将内部地址用于内部负载均衡。如需了解 IP 地址,请参阅 IP 地址文档。

利用静态内部 IP 地址,您可以从子网中配置的 IP 地址范围中预留内部 IP 地址,然后根据需要将这些预留的内部 IP 地址分配给资源。预留某个内部 IP 地址后,系统会将该地址从动态分配池中取出,并且不允许将其用于自动分配。预留静态内部 IP 地址需要特定的 Identity and Access Management (IAM) 权限,这样只有已获授权的用户才能预留静态内部 IP 地址。

由于可以预留静态内部 IP 地址,因此即使需要删除并重新创建资源,您也始终能够对同一资源使用相同的 IP 地址。

如需预留静态外部 IP 地址而不是内部 IP 地址,请参阅预留静态外部 IP 地址

准备工作

  • 了解 IP 地址
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    Terraform

    如需从本地开发环境使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

权限

如需预留和管理静态内部 IP 地址,您需要获得 compute.networkAdmin 角色或以下一项或多项权限:

  • 针对该 IP 地址的 compute.addresses.create 权限
  • 针对该 IP 地址的 compute.addresses.createInternal 权限
  • 针对虚拟机实例的 compute.instances.update 权限
  • 该子网上的 compute.subnetworks.use 权限

限制

  • 您无法取消分配或更改现有资源的内部 IPv4 地址。例如,您无法向正在运行的虚拟机实例或已停止的虚拟机实例分配新的静态内部 IP 地址。但是,您可以将资源的临时内部 IP 地址升级为静态内部 IP 地址,这样即使删除资源后,该地址仍将保留。

  • 您可以预留的静态内部 IP 地址数量不能超过项目的配额。如需了解详情,请参阅 VPC 文档中每个项目的配额

  • 一次只能有一个资源使用静态内部 IP 地址。

  • 只有 VPC 网络支持预留静态内部 IP 地址。旧版模式网络不支持此操作。

  • 删除资源不会自动释放静态内部 IP 地址。如果不再需要某个静态内部 IP 地址,必须手动释放该地址。

  • 您无法更改静态 IP 地址的名称。

  • 静态内部 IP 地址是区域性的,意味着仅限于您预留静态内部 IP 地址的区域。例如,如果您在 us-east4 区域中预留了静态内部 IP 地址,则只能使用 us-east4 中的 IP 地址。

如何预留静态内部 IP 地址

您可以在创建相关资源之前保留静态内部 IP 地址,也可以使用临时内部 IP 地址来创建资源,然后将该临时 IP 地址提升为静态内部 IP 地址。

如需使用静态内部 IP 地址,您必须为项目创建 VPC 网络。如需了解如何创建 VPC 网络,请参阅创建和管理 VPC 网络

预留静态内部 IPv4 或 IPv6 地址,然后将其与特定资源关联

在此场景中,您需要单独预留静态内部 IP 地址,然后将其分配给资源:

  1. 在您的 VPC 网络中创建子网。对于 IPv6 地址,请创建双栈子网

  2. 预留子网的主要 IP 地址范围内的一个内部 IP 地址。此步骤会创建一个内部 IP 地址资源,其中包含该特定内部 IP 地址。此步骤还会阻止 Google Cloud 自动将该地址分配为临时地址。

  3. 在创建虚拟机或负载均衡器资源时将该预留的内部 IP 地址与虚拟机实例或内部负载均衡器进行关联来使用该地址。

为资源指定临时内部 IPv4 或 IPv6 地址,然后提升该地址

在此场景中,您需要提升仍与资源关联的临时内部 IPv4 或 IPv6 地址:

  1. 在您的 VPC 网络中创建子网。对于 IPv6 地址,请创建双栈子网

  2. 使用自动分配的临时 IPv4 或 IPv6 地址或特定的 IPv4 地址来创建虚拟机实例或内部负载均衡器。

图 1 中概述了这两种方法。

内部 IP 地址预留状态。
图 1. 内部 IP 地址预留状态(点击可放大)。

配置和管理静态内部地址

虚拟机接口会从其连接到的子网获得 IP 地址。每个虚拟机接口都有一个主要内部 IPv4 地址,该地址从子网的主要 IPv4 范围中分配。如果虚拟机连接到具有内部 IPv6 范围的双栈子网,您可以为每个网络接口分配内部 IPv6 地址。

内部 IPv4 地址可通过以下方式分配:

  • Compute Engine 会自动从主要 IPv4 子网范围分配一个 IPv4 地址。
  • 您可以在创建虚拟机实例时分配特定的内部 IPv4 地址,也可以为项目预留静态内部 IPv4 地址并将该地址分配给虚拟机网络接口。

内部 IPv6 地址可通过以下方式分配:

  • Compute Engine 会自动从 IPv6 子网范围中分配一个 /96 范围。
  • 您可以从子网的内部 IPv6 范围中预留静态内部 IPv6 地址范围,并将其分配给虚拟机网络接口。

通过以下步骤,您可以配置和管理静态内部 IP 地址:

预留新的静态内部 IPv4 或 IPv6 地址

在预留新的静态内部 IP 地址之前,您必须先创建一个具有子网的 VPC 网络

如果要预留新的静态内部 IPv6 地址,VPC 网络必须启用 ULA 内部 IPv6 范围。此外,它还必须有具有 INTERNAL IPv6 访问权限类型的双栈子网

如需预留独立的内部 IP 地址,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,进入 IP 地址页面。

    转到“IP 地址”

  2. 点击预留内部静态 IP 地址
  3. 名称字段中,输入 IP 地址名称。
  4. IP 版本列表中,选择所需的 IP 版本:
    • 如需预留静态内部 IPv4 地址,请选择 IPv4
    • 如需预留静态内部 IPv6 地址,请选择 IPv6
  5. 网络子网列表中,分别选择 VPC 网络和子网。
  6. 指定您要预留 IP 地址的方式:
    • 对于 IPv4 地址,如需指定要预留的静态内部 IPv4 地址,在静态 IP 地址字段中,选择让我选择,然后输入自定义 IP 地址。否则,系统会自动为您分配子网中的静态内部 IPv4 地址。
    • 对于 IPv6 地址,系统会自动从子网的内部 IPv6 地址范围中分配一个静态内部 IPv6 地址。
  7. 可选:如果您要在不同前端中共享静态内部 IPv4 地址,请在用途列表中选择共享。默认选择非共享

  8. 点击预留

gcloud

  • 如需预留内部 IPv4 地址,请使用 compute addresses create 命令

    gcloud compute addresses create ADDRESS_NAMES \
        --region REGION --subnet SUBNETWORK \
        --addresses IP_ADDRESS
    

    请替换以下内容:

    • ADDRESS_NAMES:您要创建的一个或多个 [--purpose=SHARED_LOADBALANCER_VIP] 地址的名称。对于多个地址,请将所有地址指定为列表(以空格分隔),例如 example-address-1 example-address-2 example-address-3
    • REGION:此请求对应的区域。
    • SUBNETWORK:该内部 IP 地址所属的子网。
    • IP_ADDRESS:要预留的 IP 地址,它必须位于该子网的主要 IP 地址范围内。若未指定,则系统会自动从子网中分配 IP 地址。
  • 如需预留内部 IPv6 地址,请使用 compute addresses create 命令。指定 IPV6 作为 --ip-version 的值:

    gcloud compute addresses create ADDRESS_NAMES \
        --region REGION --subnet SUBNETWORK \
        --ip-version IPV6
    

    请替换以下内容:

    • ADDRESS_NAMES:您要预留的一个或多个地址的名称。对于多个地址,请将所有地址指定为列表(以空格分隔),例如 example-address-1 example-address-2 example-address-3
    • REGION:此请求对应的区域。
    • SUBNETWORK:该内部 IPv6 地址所属的子网。

    与内部 IPv4 预留不同,内部 IPv6 预留不支持预留子网中的特定 IP 地址。系统会自动从子网的 /64 内部 IPv6 地址范围中分配 /96 内部 IPv6 地址。

示例

  • 预留从子网中自动分配的内部 IPv4 地址:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1
    
  • 预留子网中的特定 IPv4 地址:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1 \
        --addresses 10.128.0.12
    
  • 预留子网中的静态内部 IPv6 地址:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1 \
        --ip-version IPV6
    
  • 通过传递多个 IPv4 地址名称创建多个 IPv4 地址;所有地址都预留在同一子网中:

    gcloud compute addresses create example-address-1 example-address-2 \
        --region us-central1 \
        --subnet subnet-1 \
        --addresses 10.128.0.12,10.128.0.13
    

Terraform

您可以使用 Terraform 模块创建内部 IP 地址。

在以下示例中,Terraform 参数具有您可以更改的示例值。该示例会创建两个特定的内部 IP 地址:

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "~> 3.1"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
  addresses  = ["10.0.0.3", "10.0.0.4"]
}

以下示例会创建两个动态分配的内部 IP 地址:

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "~> 3.1"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
}

REST

使用 addresses.insert 方法

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

对于 IPv4 和 IPv6 地址,请求正文都必须包含 addressType 字段(应为 INTERNAL)、地址的 name,以及 IP 地址所属的 subnetwork。请求正文可以选择包含内部 IP 地址的 purpose

此外,对于内部 IPv4 地址,您可让系统为您自动分配 IP 地址,也可使用 address 指定内部 IPv4 地址。该 IPv4 地址必须属于子网的主要 IP 地址范围。

{
  "addressType": "INTERNAL",
  "name": "IPV4_ADDRESS_NAME",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
  "address": "IPV4_ADDRESS"
  "purpose": "GCE_ENDPOINT"
}

例如:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
{
  "addressType": "INTERNAL",
  "name": "example-ipv4-address-1",
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet",
  "address": "10.128.0.12"
  "purpose": "GCE_ENDPOINT"
}

对于内部 IPv6 地址,您还需要将 ipVersion 指定为 IPV6。系统会自动从子网的内部 IPv6 地址范围中分配一个静态内部 IPv6 地址。

{
  "addressType": "INTERNAL",
  "name": "IPV6_ADDRESS_NAME",
  "ipVersion": "IPV6",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
  "purpose": "GCE_ENDPOINT"
}

例如:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
{
  "addressType": "INTERNAL",
  "name": "example-ipv6-address-1",
  "ipVersion": "IPV6"
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet",
  "purpose": "GCE_ENDPOINT"
}

为 HA VPN over Cloud Interconnect 预留静态内部 IP 地址范围

您可以预留静态内部 IP 地址范围,以与 HA VPN over Cloud Interconnect 搭配使用。

在创建静态内部 IP 地址时,您必须指定 --purpose=IPSEC_INTERCONNECT 标志和 26 到 29 之间的前缀长度 (--prefix-length)。

您预留的区域级内部 IPv4 地址将应用于 Cloud Interconnect 使用的高可用性 VPN 网关。

如需了解详情,请参阅将内部 IP 地址范围分配给高可用性 VPN 网关

确定内部 IPv4 或 IPv6 地址是临时地址还是静态地址

静态和临时内部 IP 地址的行为在大多数情况下看起来都相同。如需确定地址是静态地址还是临时地址,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入 IP 地址页面。

    转到“IP 地址”

  2. 在列表中找到地址,并查看类型列以获取 IP 地址类型。

将使用中的临时内部 IPv4 或 IPv6 地址升级为静态地址

如果您具有当前正在使用的临时内部 IP 地址,则可以将这些地址提升为静态内部 IP 地址,以使其与您的项目一同保留,直到您主动将其移除。

如需将临时内部 IP 地址提升为静态内部 IP 地址,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,进入 IP 地址页面。

    转到“IP 地址”

  2. 点击内部 IP 地址
  3. 可选:在过滤条件字段中,搜索要提升的临时 IP 地址。
  4. 在要提升的 IP 地址的更多操作菜单 () 中,选择提升为静态 IP 地址
  5. 输入新静态 IP 地址的名称,然后点击预留

gcloud

  1. 在提升现有的临时内部 IPv6 地址之前,您需要知道该 IP 地址的值。使用 Google Cloud CLI 向资源发出 describe 请求以获取 IP 地址值。

    • 对于 IPv4 地址,请使用以下命令:

      gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "networkIP"
      
    • 对于 IPv6 地址,请使用以下命令:

      gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "ipv6Address"
      

    gcloud CLI 会返回 networkIP 值(对于 IPv4)或 ipv6Address 值(对于 IPv6),这就是资源正在使用的内部 IP 地址。

  2. 提升地址:

    • 如需提升一个或多个现有内部 IPv4 地址,请使用 compute addresses create 命令,并在 --addresses 标志中提供要提升的具体内部 IP 地址:

      gcloud compute addresses create IPV4_ADDRESS_NAMES \
        --addresses IPV4_ADDRESSES \
        --region REGION \
        --prefix-length PREFIX_LENGTH \
        --subnet SUBNETWORK
      

      请替换以下内容:

      • IPV4_ADDRESS_NAMES:IPv4 地址的名称。对于多个地址,将所有地址名称指定为列表,并以空格分隔,例如 example-address-name-1 example-address-name-2 example-address-name-3。按照声明 IP 地址的顺序声明名称。 例如,假设您将地址名称指定为 example-address-name-1 example-address-name-2 example-address-name-3,并将 IPv4 地址指定为 192.0.2.0 192.0.2.1 192.0.2.2。在这种情况下,Compute Engine 会通过以下方式映射名称和地址:

        • example-address-name-1192.0.2.0
        • example-address-name-2192.0.2.1
        • example-address-name-3192.0.2.2
      • IPV4_ADDRESSES:要提升的 IPv4 地址。对于多个地址,请将所有地址指定为列表(以空格分隔),例如 192.0.2.0 192.0.2.1 192.0.2.2

      • REGION:要预留该地址的区域。

      • PREFIX_LENGTH:可选。IPv4 地址范围的前缀长度。该值必须是 7 到 31 之间的整数。仅在您指定地址范围时添加此字段。如果指定的 IPv4 地址是单个 IP 地址,则排除该字段。

      • SUBNETWORK:此请求对应的子网。

    • 如需提升一个或多个现有内部 IPv6 地址,请使用 compute addresses create 命令,并在 --addresses 标志中提供具体的内部 IPv6 地址:

      gcloud compute addresses create IPV6_ADDRESS_NAMES \
       --addresses IPV6_ADDRESSES \
       --region REGION \
       --prefix-length PREFIX_LENGTH \
       --subnet SUBNETWORK
      

      替换以下内容:

      • IPV6_ADDRESS_NAMES:地址的名称。 按照声明 IPv6 地址的顺序声明名称。在这种情况下,IPV6_ADDRESS_NAME_1IPV6_ADDRESS_1 相对应,IPV6_ADDRESS_NAME_2IPV6_ADDRESS_2 相对应。
      • IPV6_ADDRESS_1,[IPV6_ADDRESS_2,...]:要提升的 IPv6 地址(CIDR 格式)。
      • PREFIX_LENGTH_1,[PREFIX_LENGTH_2,...]:IPv6 地址的前缀长度。
      • REGION:要预留该地址的区域。
      • SUBNETWORK:此请求对应的子网。

      即使内部 IPv6 地址已提升为静态内部 IPv6 地址,该地址仍然与现有实例关联。如果您需要将这个新提升的静态内部 IPv6 地址分配给另一个资源,请先从现有实例中取消分配该静态内部 IPv6 地址

REST

使用 addresses.insert 方法

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

对于 IPv4 和 IPv6 地址,请求正文都必须包含 addressType(应为 INTERNAL)、地址的 name、要提升的 address,以及 IP 地址所属的 subnetwork。此外,对于 IPv6 地址,请求正文必须包含 prefixLength,并且值为 96

  • 用于提升内部 IPv4 地址的请求正文:

    {
    "name": "ADDRESS_NAME",
    "addressType": "INTERNAL",
    "address": "IP_ADDRESS",
    "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"
    }
    

    例如:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
    {
    "name": "example-IPv4-address-1",
    "addressType": "INTERNAL",
    "address": "10.128.0.2",
    "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet"
    }
    
  • 用于提升内部 IPv6 地址的请求正文:

    {
    "name": "ADDRESS_NAME",
    "addressType": "INTERNAL",
    "address": "IP_ADDRESS",
    "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"
    "prefixLength": 96
    }
    

    例如:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
    {
    "name": "example-IPv6-address-1",
    "addressType": "INTERNAL",
    "address": "fd20:0:0::",
    "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet"
    "prefixLength": 96
    }
    

创建具有预留的内部 IPv4 或 IPv6 地址的虚拟机实例

预留静态内部 IP 地址后,您可以在创建虚拟机实例时将预留地址分配给该实例。

创建连接到具有内部 IPv6 范围的双栈子网的虚拟机时,您无需指定任何预留的静态内部 IPv6 地址。Compute Engine 会自动为该虚拟机分配一个来自该子网的 IPv6 范围的临时内部 IPv6 地址。

控制台

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    打开“创建实例”

  2. 展开高级选项部分。

  3. 展开网络部分。

  4. 如需分配内部 IPv4 地址,请执行以下操作:

    1. 选择网络和子网。
    2. 主要内部 IPv4 地址列表中选择预留的内部 IPv4 地址。

    或者,选择预留静态内部 IP 地址并预留新的静态内部 IPv4 地址。

  5. 如需分配内部 IPv6 地址,请执行以下操作:

    1. 选择包含 IPv6 子网的网络。
    2. 子网列表中选择双栈子网。该子网必须具有 INTERNAL IPv6 访问权限类型。
    3. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
    4. 主要内部 IPv6 地址列表中选择预留的内部 IPv6 地址。

    或者,选择预留静态内部 IPv6 地址并预留新的静态内部 IPv6 地址。

  6. 如需完成默认网络接口的修改,请点击完成

  7. 继续虚拟机创建过程。

  8. 点击创建

gcloud

  • 如需创建具有预留内部 IPv4 地址的实例,请在创建实例时,使用 --private-network-ip 标志指定预留内部 IPv4 地址:

    gcloud compute instances create VM_NAME
        --private-network-ip IP_ADDRESS
    

    请替换以下内容:

    • VM_NAME:您要创建的虚拟机的名称。
    • IP_ADDRESS:您要分配的 IP 地址。

    如果您使用的是自定义子网模式网络,则还必须使用 --subnet SUBNET 参数指定子网。

  • 如需创建具有预留内部 IPv6 地址的实例,请在创建实例时,使用 --internal-ipv6-address 标志指定预留内部 IPv6 地址:

    gcloud compute instances create VM_NAME
        --subnet SUBNETWORK
        --stack-type IPV4_IPV6
        --internal-ipv6-address INTERNAL_IPV6_ADDRESS
        --zone ZONE
    

    请替换以下内容:

    • VM_NAME:您要创建的虚拟机的名称。
    • SUBNETWORK:内部 IPv6 地址的子网。
    • 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": "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": "IPV4_ADDRESS"
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
    }

    请替换以下内容:

    • PROJECT_ID:项目的 ID,您将在该项目中创建虚拟机。
    • ZONE:要在其中创建虚拟机的可用区。
    • VM_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": "VM_NAME",
    "machineType": "zones/us-central1-f/machineTypes/e2-micro",
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "network": "global/networks/default",
      "stackType": "IPV4_IPV6"
      "ipv6Address": ""IPV6_ADDRESS"",
      "internalIpv6PrefixLength": 96
      "ipv6AccessType": INTERNAL,
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
    }

    请替换以下内容:

    • PROJECT_ID:项目的 ID,您将在该项目中创建虚拟机。
    • ZONE:要在其中创建虚拟机的可用区。
    • VM_NAME:虚拟机的名称。
    • IPV6_ADDRESS:要分配给虚拟机的内部 IPv6 地址。

如果您删除了具有指定 IP 地址的实例,该地址会被返回未分配的地址池中。如果您需要在实例生命周期结束后保留内部 IP 地址,可以预留静态内部 IP 地址

创建具有静态内部 IPv4 地址的内部负载均衡器

如需创建使用静态内部 IPv4 地址的内部负载均衡器,请参阅以下内容:

对次要网络接口使用静态内部 IPv4 或 IPv6 地址

创建具有多个网络接口的虚拟机实例时,可以为主要和次要网络接口使用保留的静态内部 IPv4 或 IPv6 地址。

如需为次要网络接口使用静态内部 IPv4 或 IPv6 地址,请参阅创建具有多个网络接口的虚拟机实例

为现有实例更改或分配内部 IPv6 地址

您可以为现有虚拟机实例更改或分配内部 IPv6 地址。

如果实例已分配有内部 IPv6 地址,则必须先取消分配该地址。然后,使用实例的网络接口为实例分配新地址。

如需为现有虚拟机实例更改或分配静态内部 IPv6 地址,请完成以下步骤。

控制台

  1. 预留静态内部 IPv4 地址
  2. 在 Google Cloud 控制台中,打开虚拟机实例页面。

    进入“虚拟机实例”

  3. 点击要更改内部 IPv6 地址的实例的名称。
  4. 实例详情页面上,完成以下步骤:

    1. 点击修改
    2. 展开网络接口
    3. 主要内部 IPv6 地址列表中,选择自动分配 (/96) 或预留的静态内部 IPv6 地址。
    4. 点击完成
  5. 点击保存

gcloud

使用 compute instances network-interfaces update 命令

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

请替换以下内容:

  • VM_NAME:您要创建的虚拟机的名称。
  • NIC:要更新的网络接口的名称。
  • 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/VM_NAME
  {
    ...
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "stackType": "IPV4_IPV6"
      "ipv6Address": "IPV6_ADDRESS",
      "internalIpv6PrefixLength": 96
      "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
  }
 

请替换以下内容:

  • PROJECT_ID:虚拟机所属项目的 ID。
  • ZONE:要在其中创建虚拟机的可用区。
  • VM_NAME:虚拟机的名称。
  • IPV6_ADDRESS:要分配给虚拟机的内部 IPv6 地址。

    如果您指定内部 IPv6 地址资源的 URI 或 IPv6 地址范围作为 IPV6_ADDRESS 的值,则必须将 internalIpv6PrefixLength 的值留空。

更改转发规则的 IP 地址

如果您更改了虚拟机的内部 IP 地址并需要更新转发规则,请执行以下操作:

  1. 取消分配 IP 地址

  2. 使用 gcloud compute forwarding-rules delete 命令forwardingRules.delete 方法删除转发规则。

  3. 使用 gcloud compute forwarding-rules create 命令forwardingRules.insert 方法重新创建转发规则。

取消分配静态内部 IPv6 地址

如需从虚拟机实例取消分配静态内部 IPv6 地址,您可以更新该实例的网络接口或删除分配了该地址的实例

当您取消分配内部 IPv6 地址时,系统会将其从资源中移除,但保留为项目预留的地址。您稍后可以将地址重新分配给其他资源。

如需从虚拟机实例取消分配静态内部 IPv6 地址,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    进入“虚拟机实例”

  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 VM_NAME \
    --network-interface NIC \
    --stack-type IPV4_ONLY \
    --zone ZONE

请替换以下内容:

  • VM_NAME:您要更新其网络接口的虚拟机的名称。
  • NIC:要更新的网络接口的名称。
  • ZONE:虚拟机的可用区。

检查静态内部 IPv6 地址目前是否可以使用,以及是否标记为 RESERVED 而非 IN_USE

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

REST

更新内部 IPv6 地址关联的网络接口的实例栈类型。

  1. instances.updateNetworkInterface 方法发出 PATCH 请求。
  2. 在请求正文中,将 stackType 字段的值更新为 IPV4_ONLY

    例如:

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

    请替换以下内容:

    • PROJECT_ID:虚拟机所属项目的 ID。
    • ZONE:要在其中创建虚拟机的可用区。
    • VM_NAME:虚拟机的名称。

通过共享 VPC 使用静态内部 IPv4 或 IPv6 地址

可在共享 VPC 网络的共享子网中创建预留的静态内部 IP 地址。即使 IP 地址的值来自共享 VPC 网络的所选共享子网中的可用 IP 地址范围,IP 地址对象本身也需与使用该对象的资源在同一服务项目中创建。如需详细了解此应用场景,请参阅以下资源:

列出静态内部 IPv4 或 IPv6 地址

如需查看所有现有静态 IP 地址(包括外部 IP 地址和内部 IP 地址),请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击您要查看的 VPC 网络。
  3. 点击静态内部 IP 地址,查看此 VPC 网络中的所有预留静态内部 IP 地址。

gcloud

使用 compute addresses list 命令

gcloud compute addresses list

REST

使用 addresses.list 方法

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

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID。
  • REGION:此请求的区域名称。

如需列出所有区域中的所有地址,请使用 aggregatedList 方法

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

释放静态内部 IPv4 或 IPv6 地址

如果您不再需要某个静态内部 IP 地址,可以通过删除 IP 地址资源来释放该 IP 地址。

如果您使用 Google Cloud 控制台,则只有在静态 IP 地址未被其他资源使用时,才能释放该地址。

如果您使用 gcloud CLI 或 REST,则无论 IP 地址当前是否正被其他资源使用,都可以释放地址。

  • 如果 IP 地址未被资源使用,则会返回到可用内部 IP 地址池中。

  • 如果 IP 地址正在被资源使用,则在资源被删除前,该 IP 地址会一直与该资源关联。

如需释放静态内部 IPv4 或 IPv6 地址,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,进入 IP 地址页面。

    转到“IP 地址”

  2. 点击内部 IP 地址
  3. 选择要释放的静态内部 IP 地址。
  4. 点击释放静态地址,然后点击对话框中的释放以确认此操作。

gcloud

使用 compute addresses delete 命令

gcloud compute addresses delete ADDRESS_NAME \
    --region REGION

请替换以下内容:

  • ADDRESS_NAME:要删除的地址的名称。
  • REGION:地址所属的区域。

例如:

gcloud compute addresses delete example-address-to-delete \
    --region us-west1

REST

使用 addresses.delete 方法

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

以下示例会删除 us-west1 区域中的地址:

DELETE https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-west1/addresses/example-address-to-delete

后续步骤