预留静态外部 IP 地址

您可以预留静态外部 IP 地址。您还可以列出和释放预留的静态外部 IP 地址。如需为虚拟机 (VM) 实例分配静态外部 IP 地址,请参阅配置静态外部 IP 地址

外部 IP 地址可以是静态地址或临时地址。如果虚拟机需要固定不变的外部 IP 地址,您可以获取静态外部 IP 地址。您可以预留新的外部 IP 地址,也可以提升现有的临时外部 IP 地址。

如果您需要静态内部 IP 地址,请改为参阅预留静态内部 IP 地址

准备工作

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

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

    控制台

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

    gcloud

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

    gcloud init

    Terraform

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

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

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

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    REST

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

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

      gcloud init

所需的角色

如需获得预留和管理静态 IP 地址所需的权限,请让您的管理员为您授予项目的 Compute Network Admin (roles/compute.networkAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色可提供预留和管理静态 IP 地址所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

预留和管理静态 IP 地址需要以下权限:

  • 针对该 IP 地址的 compute.addresses.create 权限
  • 针对该 IP 地址的 compute.addresses.createInternal 权限
  • 针对网络的 compute.networks.list 权限
  • 针对子网的 compute.subnetworks.use 权限
  • 针对子网的 compute.subnetworks.list 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

静态外部 IP 地址简介

静态外部 IP 地址是为您的资源预留直到您决定将其释放的 IP 地址。如果您有一个客户或用户要用来访问服务的 IP 地址,您可以预留该 IP 地址,以仅供您的资源使用。您也可以将临时外部 IP 地址升级为静态外部 IP 地址。

如需了解详情,请参阅 IP 地址

下表列出了 Google Cloud 支持的静态外部 IP 地址。

IP 地址类型 资源 IP 范围 来源 关联对象数
区域级外部 IPv4 地址 虚拟机和区域级负载均衡器 /32 Google 的外部 IP 地址池 项目
区域级外部 IPv6 地址 虚拟机和支持的区域级负载均衡器 /96 子网的外部 IPv6 地址范围 子网
全球外部 IPv4 地址 全球负载均衡器 /32 Google 的外部 IP 地址池 项目
全球外部 IPv6 地址 全球负载均衡器 /64 Google 的外部 IP 地址池 项目

如需查看区域级和全球负载均衡器列表,请参阅负载均衡器类型摘要

限制

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

  • IP 地址分配给资源后,无法分辨该 IP 地址是静态地址还是临时地址。您可以将 IP 地址与为相关项目预留的静态外部 IP 地址列表进行比较。如需查看项目可用的静态外部 IP 地址列表,请使用 gcloud compute addresses list 子命令

  • 每个虚拟机都可以有多个网络接口,并且每个接口可以分配以下 IP 地址:

    • 内部 IPv4 地址(必需)
    • 外部 IPv4 地址
    • IPv6 地址范围,可以是内部或外部,但不能同时是两者
  • 您无法更改静态 IP 地址的名称。

  • 分配的外部 IP 地址与虚拟机位于同一物理主机上,并且与虚拟机位于同一区域,可用于包括路由、延迟时间和定价在内的所有用途。无论互联网地理位置查找信息如何,情况都是如此。

注意:网络接口可以接收来自多个转发规则的流量,这些转发规则可能适用于其他外部 IP 地址。任意数量的外部 IP 地址都可以通过这些转发规则来引用某个网络接口,但每个网络接口只能分配有一个外部 IPv4 地址范围和一个外部 IPv6 地址范围。

如需详细了解负载平衡和转发规则,请参阅负载平衡文档。

保留新的静态外部 IP 地址

预留该地址后,请在创建新虚拟机时将其分配给新虚拟机,或将其分配给现有虚拟机

控制台

  1. 在 Google Cloud 控制台中,进入预留静态地址页面。

    进入“预留静态地址”

  2. 为新地址选择一个名称。

  3. 指定网络服务层级是高级还是标准。 只有优质层级支持 IPv6 静态地址预留。

  4. 指定此 IP 地址是 IPv4 地址还是 IPv6 地址。

  5. 指定此 IP 地址是区域级地址还是全球地址。

    • 如果您要为全球负载均衡器预留静态 IP 地址,请选择全球,然后点击预留
    • 如果您要为虚拟机或区域级负载均衡器预留静态 IP 地址,请选择区域级,然后选择要在其中创建该地址的区域。
  6. 如果您要预留区域级外部 IPv6 地址,则还要选择以下各项:

    • 网络:VPC 网络
    • 子网:要从中分配静态区域级 IPv6 地址的子网
    • 端点类型:选择虚拟机实例网络负载均衡器
  7. 可选:如果您要为虚拟机预留静态外部 IP 地址,请在附加目标列表中,选择要将该 IP 地址附加到的虚拟机。

  8. 点击预留以预留该 IP 地址。

gcloud

如需预留静态外部 IP 地址,请使用 gcloud compute addresses create 命令

请按照以下说明预留静态外部 IPv4 或 IPv6 地址:

全球 IP 地址

如需预留全球 IP 地址,请运行以下命令:
  gcloud compute addresses create ADDRESS_NAME \
      --global \
      --ip-version [IPV4 | IPV6]
  

区域外部 IPv4 地址

如需预留区域级外部 IPv4 地址,请运行以下命令:
   gcloud compute addresses create ADDRESS_NAME \
       --region=REGION
   

区域级外部 IPv6 地址

如需预留区域级外部 IPv6 地址,请运行以下命令:
   gcloud compute addresses create ADDRESS_NAME \
       --region=REGION \
       --subnet=SUBNET_NAME \
       --ip-version=IPV6 \
       --endpoint-type=[VM | NETLB]
   

替换以下内容:

  • ADDRESS_NAME:您要与此地址关联的名称。
  • REGION:对于区域级外部 IP 地址,请指定您要在其中预留此地址的区域。此区域应为您要将 IP 地址附加到的资源所在的区域。
  • SUBNET_NAME:对于区域级外部 IPv6 地址,请指定要从中分配静态区域级 IPv6 地址的子网。该子网必须具有分配的外部 IPv6 地址范围
  • [IPV4 | IPV6]:对于全球 IP 地址,请指定 IP 版本(IPv4 或 IPv6)。对于区域级外部 IPv6 地址,请指定 IPv6。/96 IPv6 范围是从指定的子网分配的。
  • VM | NETLB:对于区域级外部 IPv6 地址,请指定端点类型;无论是虚拟机还是网络负载均衡器。

如需查看结果,请使用 gcloud compute addresses describe 命令

gcloud compute addresses describe ADDRESS_NAME

Terraform

您可以使用 google_compute_address 资源创建区域级外部 IP 地址。

resource "google_compute_address" "default" {
  name   = "my-test-static-ip-address"
  region = "us-central1"
}

以下示例展示了如何使用 google_compute_global_address 资源创建全球外部 IPv6 地址:

resource "google_compute_global_address" "default" {
  project      = var.project_id # Replace this with your service project ID in quotes
  name         = "ipv6-address"
  address_type = "EXTERNAL"
  ip_version   = "IPV6"
}

API

  • 如需创建区域 IPv4 地址,请调用区域 addresses.insert 方法

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

    请求正文应包含以下内容:

    {
      "name": "ADDRESS_NAME"
    }
    

    请替换以下内容:

    • PROJECT_ID:此请求的项目 ID
    • REGION:此请求的区域名称。
    • ADDRESS_NAME:您要与此地址关联的名称
  • 对于全球静态 IPv4 地址,请调用 globalAddresses.insert 方法

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

    请求正文应包含以下内容:

    {
      "name": "ADDRESS_NAME"
    }
    
  • 对于全球静态 IPv6 地址,请调用 globalAddresses.insert 方法

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

    请求正文应包含以下内容:

    {
      "name": "ADDRESS_NAME",
      "ipVersion": "IPV6"
    }
    

    如需查看结果,请使用 addresses.get 方法

  • 对于区域级静态 IPv6 地址,请调用 addresses.insert 方法

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

    请求正文应包含以下内容:

    {
      "name": "ADDRESS_NAME",
      "ipVersion": "IPV6",
      "ipv6EndpointType": "VM|LB",
      "networkTier": "PREMIUM",
      "subnetwork": "SUBNET"
    }
    

    SUBNET 替换为此项目的子网。

    如需查看结果,请使用 addresses.get 方法

升级临时外部 IP 地址

如果实例具有临时外部 IP 地址,并且您要将该 IP 地址永久分配给项目,请将该临时外部 IP 地址提升为静态外部 IP 地址。将临时外部 IP 地址升级为预留的外部 IP 地址不会导致 Google Cloud 丢弃发送到实例的数据包。这包括直接发送或通过负载平衡器发送到实例的数据包。

控制台

  1. 转到 IP 地址页面。

    转到“IP 地址”

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

gcloud

请按照以下说明提升静态外部 IPv4 或 IPv6 地址:

  • 如需将临时外部 IPv4 地址提升为静态外部 IPv4 地址,请通过将 --addresses 标志与 compute addresses create 命令结合使用来提供临时外部 IP 地址。 可以使用 region 标志升级临时区域 IP 地址,或者可以使用 global 标志升级临时全球 IP 地址。

    gcloud compute addresses create ADDRESS_NAME --addresses=IP_ADDRESS \
        [--region=REGION | --global]
    

    替换以下内容:

    • ADDRESS_NAME:您要与此地址关联的名称。
    • IP_ADDRESS:您要提升的 IP 地址。
    • REGION 是区域级 IP 地址所属的区域。

    • 如需将临时区域级外部 IPv6 地址提升为静态区域级外部 IPv6 地址,请通过将 --addresses 标志与 compute addresses create 命令结合使用来提供临时外部 IP 地址。

    gcloud compute addresses create ADDRESS_NAME \
        --region=REGION \
        --addresses=IPV6_ADDRESS \
        --prefix-length=96
    

    替换以下内容:

    • ADDRESS_NAME:IP 地址资源的名称
    • REGION:IPv6 地址资源的区域
    • IPV6_ADDRESS:您要升级的 IPv6 地址。

API

如需升级临时地区 IP 地址,请调用 addresses.insert 方法

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

如需升级临时全球 IP 地址,请向以下 URI 发出 POST 请求:

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

指定请求正文的必填字段的值:

  • 对于 IPv4 地址,请求正文应包含以下字段:

    {
      "name": "ADDRESS_NAME",
      "address": "IPV4_ADDRESS"
      "addressType": "EXTERNAL"
    }
    
  • 对于 IPv6 地址,请求正文应包含以下字段:

    {
      "name": "ADDRESS_NAME",
      "address": "IPV6_ADDRESS"
      "prefixLength": 96
      "addressType": "EXTERNAL"
    }
    

    替换以下内容:

    • ADDRESS_NAME:您要与此地址关联的名称
    • IPV4_ADDRESS|IPV6_ADDRESS:您要提升的 IPv4 或 IPv6 地址
    • REGION:IPv4 或 IPv6 地址所属的区域
    • PROJECT_ID:此请求的项目 ID

在外部 IP 地址升级为静态外部 IP 地址后,该地址仍然会附加到该实例。如果您需要将这个新升级的静态外部 IP 地址分配给另一个资源,请为现有实例取消分配该静态外部 IP 地址

列出静态外部 IP 地址

如需列出您为项目预留的静态外部 IP 地址,请按照以下步骤操作。

控制台

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

    进入“IP 地址”

  2. 点击外部 IP 地址

gcloud

使用 gcloud compute addresses list 命令

  • 如需列出所有 IP 地址,请使用以下命令:

    gcloud compute addresses list
  • 如需列出所有全球 IP 地址,请使用以下命令:

    gcloud compute addresses list --global
  • 如需列出给定区域中的所有区域级 IP 地址,请使用以下命令:

    gcloud compute addresses list \
        --regions=REGION
    

    REGION 替换为要列出其地址的区域。您可以通过指定以英文逗号分隔的区域名称来列出多个区域的地址:

    gcloud compute addresses list \
        --regions=REGION1,REGION2,..REGION_n_
    

API

  • 如需列出区域级 IPv4 或 IPv6 地址,请调用 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
    
  • 如需列出全球 IPv4 或 IPv6 地址,请调用 globalAddresses.list 方法

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

    请替换以下内容:

    PROJECT_ID:此请求的项目 ID

描述静态外部 IP 地址

如需获取有关静态外部 IP 地址的信息,请按照以下步骤操作。

控制台

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

    进入“IP 地址”

  2. 点击外部 IP 地址

  3. 点击要获取其详细信息的 IP 地址。

gcloud

使用 gcloud compute addresses describe 命令并将 ADDRESS_NAME 替换为您要描述的外部 IP 地址的名称。

  • 对于全球 IPv4 或 IPv6 地址,请使用以下命令:

    gcloud compute addresses describe ADDRESS_NAME --global
  • 对于区域级 IPv4 或 IPv6 地址,请使用以下命令:

    gcloud compute addresses describe ADDRESS_NAME --region=REGION

API

  • 如需描述区域级 IPv4 或 IPv6 地址,请调用 addresses.get 方法

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

    替换以下内容:

    • PROJECT_ID:请求的项目 ID。
    • REGION:此请求的区域名称
    • ADDRESS_NAME:IP 地址的名称
  • 如需描述全球 IPv4 或 IPv6 地址,请调用 globalAddresses.get 方法

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

    替换以下内容:

    • PROJECT_ID:请求的项目 ID。
    • ADDRESS_NAME:IP 地址的名称

释放静态外部 IP 地址

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

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

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

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

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

控制台

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

    进入“IP 地址”

  2. 点击外部 IP 地址

  3. 选择要释放的 IP 地址。

  4. 点击释放静态地址

    如果您没有看到此选项,请点击顶部菜单栏中的更多操作菜单 (),然后从列表中选择释放静态地址

gcloud

使用 compute addresses delete 命令

gcloud compute addresses delete ADDRESS_NAME

ADDRESS_NAME 替换为要释放的 IPv4 或 IPv6 地址的名称。

API

  • 如需释放区域级 IPv4 或 IPv6 地址,请调用 addresses.delete 方法

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

    替换以下内容:

    • PROJECT_ID:此请求的项目 ID
    • REGION:此请求的地区名称
    • ADDRESS_NAME:IP 地址的名称
  • 如需释放全球 IPv4 或 IPv6 地址,请调用 globalAddresses.delete 方法

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

    请替换以下内容:

    • ADDRESS_NAME:IP 地址的名称
    • PROJECT_ID:此请求的项目 ID

后续步骤