创建使用 IPv6 地址的实例


默认情况下,Compute Engine 实例使用 IPv4 地址创建。您可以选择创建使用 IPv6 地址的计算实例。同时具有 IPv4 和 IPv6 配置的计算实例称为双栈实例。IPv6 地址是网络接口上配置的任何 IPv4 地址的补充。

如果 Compute Engine 实例连接到的子网配置了 IPv6 范围,则您可以在该实例上配置 IPv6 地址。

计算实例上的任何网络接口都可以配置 IPv6 地址。如需详细了解如何配置多个网络接口,请参阅多个网络接口

实例网络接口的栈类型决定了它可以连接到的子网类型:

  • 仅 IPv4 的网络接口可以连接到双栈子网和仅 IPv4 的子网。
  • 双栈网络接口可以连接到双栈子网。
  • 仅 IPv6 的网络接口可以连接到双栈子网和仅 IPv6 子网(预览版)。

此外,子网的 IPv6 访问类型配置决定了该子网是具有内部还是外部 IPv6 范围。已连接的实例会从子网继承 IPv6 访问权限类型。

如需详细了解 IPv6 地址,请参阅 IPv6 概览

限制

  • 仅 IPv6 的实例(预览版)仅支持 Ubuntu 和 Debian 操作系统。

准备工作

  • 您必须先创建网络和子网,然后才能创建计算实例。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

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

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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得创建具有 IPv6 地址的实例所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

您必须拥有以下权限才能执行此任务:

  • 针对项目的 compute.instances.create 权限
  • 使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly 权限
  • 使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly 权限
  • 使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly 权限
  • 为虚拟机分配旧版网络:针对项目的 compute.networks.use 权限
  • 为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use 权限
  • 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的 compute.networks.useExternalIp 权限
  • 为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use 权限
  • 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp 权限
  • 为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata 权限
  • 为虚拟机设置标记:针对虚拟机的 compute.instances.setTags 权限
  • 为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels 权限
  • 为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount 权限
  • 为虚拟机创建新磁盘:针对项目的 compute.disks.create 权限
  • 以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use 权限
  • 以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly 权限

创建双栈实例

如需创建具有内部 IPv4 地址和外部 IPv6 地址的实例,请将计算实例连接到双栈子网

如果您使用共享 VPC,并且想要创建连接到共享子网的双栈实例,请参阅共享 VPC 文档中的创建实例

  1. 转到创建实例页面。

    转到“创建实例”

  2. 如果出现提示,请选择您的项目并点击继续。系统随即会显示创建实例页面,并显示机器配置窗格。

  3. 机器配置窗格中,执行以下操作:

    1. 名称字段中,指定实例的名称。如需了解详情,请参阅为资源命名
    2. 可选:在可用区字段中,为此实例选择可用区。 选择一个区域中包含已配置 IPv6 范围的子网的可用区。
    3. 为您的实例选择机器家族。然后,Google Cloud 控制台会显示适用于所选机器家族的机器系列。以下机器家族选项可供选择:

      • 通用
      • 计算优化
      • 内存优化
      • 存储优化
      • GPU 数量

    4. 系列列中,选择实例的机器系列。

    5. 机器类型部分中,为实例选择机器类型。

  4. 在导航菜单中,点击网络。在显示的网络窗格中,执行以下操作:

    1. 网络接口部分中,点击网络接口以展开并修改它。

    2. 对于网络子网,请选择已配置 IPv6 范围的网络和子网。

    3. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)

    4. 主要内部 IPv4 地址字段中,选择以下选项之一:

      • 如需分配新的临时 IPv4 内部地址,请选择临时
      • 如需分配现有的静态外部 IP 地址,请从列表中选择预留的 IPv4 地址的名称。
      • 如需创建并分配新的静态内部 IPv4 地址,请选择预留静态内部 IPv4 地址
    5. 可选:对于外部 IPv4 地址,选择以下选项之一:

      • 如需分配临时外部 IPv4 地址,请选择临时
      • 如需创建没有外部 IPv4 地址的实例,请选择
      • 如需分配现有的静态外部 IP 地址,请从列表中选择预留的 IPv4 地址的名称。
      • 如需创建并分配新的静态外部 IPv4 地址,请选择预留静态外部 IPv4 地址
    6. 可选:如需配置外部 IPv6 地址,请针对外部 IPv6 地址,选择以下选项之一:

      • 如需分配新的临时外部 IPv6 地址,请选择自动分配
      • 如需分配现有的静态外部 IP 地址,请从列表中选择预留的 IPv6 地址的名称。
      • 如需创建并分配新的静态外部 IPv6 地址,请选择预留静态外部 IPv6 地址
    7. 如需完成网络接口的修改,请点击完成

    8. 可选:如需配置其他网络接口,请点击添加网络接口,然后针对网络窗格重复上述步骤。

  5. 可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项

  6. 要创建并启动该实例,请点击创建

使用 gcloud compute instances create 命令来创建实例。

gcloud compute instances create INSTANCE_NAME \
    --subnet=SUBNET_NAME \
    --zone=ZONE \
    --stack-type=IPV4_IPV6

替换以下内容:

  • INSTANCE_NAME:实例的名称
  • SUBNET_NAME:要将实例连接到的子网;子网必须具有 IPv6 子网范围
  • ZONE:要在其中部署实例的区域
  1. 选择一个映像。请记下映像或映像系列的名称以及包含该映像的项目的名称。
  2. 使用 instances.insert 方法通过映像系列或特定版本的操作系统映像创建实例:

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:要在其中创建实例的项目的 ID。
    • ZONE:要在其中创建实例的可用区。
    • MACHINE_TYPE_ZONE:如果使用自定义机器类型,请指定包含要用于新实例的自定义机器类型的可用区;否则,请指定要用于创建实例的可用区。
    • MACHINE_TYPE:新实例的预定义自定义机器类型,例如 n4-standard-2
    • INSTANCE_NAME:新实例的名称
    • REGION:子网所在的区域
    • SUBNET:双栈子网
    • IMAGE_PROJECT:可选:包含映像的映像项目
    • IMAGE(可选):指定以下其中一项:

      • 操作系统映像的特定版本,例如 debian-12-bookworm-v20241009
      • 映像系列,其格式必须为 family/IMAGE_FAMILY。 此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

    HTTP 方法和网址:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

    请求 JSON 正文:

    {
        "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
        "name": "INSTANCE_NAME",
        "networkInterfaces": [
          {
            "subnetwork": "regions/REGION/subnetworks/SUBNET",
            "stackType": "IPV4_IPV6"
          }
        ],
        "disks": [
          {
            "initializeParams": {
              "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            },
            "boot": true
          }
        ],
    }
    

    如需发送您的请求,请展开以下选项之一:

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances"

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances" | Select-Object -Expand Content

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "compute#operation",
      "id": "9216044482154695709",
      "name": "operation-1739207409646-62dccc7d7bc58-d1350b42-64fdb7f7",
      "zone": "https://www.googleapis.com/compute/{api_version}/projects/`PROJECT_ID`/zones/`ZONE`",
      "operationType": "insert",
      "targetLink": "https://www.googleapis.com/compute/{api_version}/projects/`PROJECT_ID`/zones/`ZONE`/instances/`INSTANCE_NAME`",
      "targetId": "2679381553616227357",
      "status": "RUNNING",
      "user": "USER_ID",
      "progress": 0,
      "insertTime": "2025-02-10T09:10:10.551-08:00",
      "startTime": "2025-02-10T09:10:10.551-08:00",
      "selfLink": "https://www.googleapis.com/compute/{api_version}/projects/`PROJECT_ID`/zones/`ZONE`/operations/operation-1565289606387-58f9f62f5989c-e582f586-6d22f38"
     "kind": "compute#operation"
    }
    

创建仅限 IPv6 的实例

如需创建仅限 IPv6 的实例,请按照本部分中的步骤操作。

对于具有单个网络接口的 Compute Engine 实例,该实例可以具有内部或外部 IPv6 地址,具体取决于其接口连接到的网络的访问类型。您必须创建一个自定义模式虚拟私有云 (VPC) 网络,其中包含具有 IPv6 地址范围的子网。

您必须先创建以下内容,然后才能创建同时使用内部和外部 IPv6 地址的多 NIC 虚拟机实例:

  • 内部网络和子网:启用了 IPv6 ULA 的自定义模式 VPC 网络、具有 IPv6 地址范围的子网,以及将访问类型设为 internal
  • 外部网络和子网:第二个自定义模式 VPC 网络、第二个具有 IPv6 地址范围的子网,以及设置为 external 的访问类型。

创建实例时,您需要配置两个网络接口,一个连接到具有内部 IPv6 地址范围的子网,另一个连接到具有外部地址范围的子网。

如果您使用共享 VPC,并且想要创建连接到共享子网的仅 IPv6 实例,请参阅共享 VPC 文档中的创建实例

  1. 转到创建实例页面。

    转到“创建实例”

  2. 如果出现提示,请选择您的项目并点击继续。系统随即会显示创建实例页面,并显示机器配置窗格。

  3. 机器配置窗格中,执行以下操作:

    1. 名称字段中,指定实例的名称。如需了解详情,请参阅为资源命名
    2. 可选:在可用区字段中,为此实例选择可用区。选择一个区域中包含已配置 IPv6 范围的子网的可用区。
    3. 为您的实例选择机器家族。然后,Google Cloud 控制台会显示适用于所选机器家族的机器系列。以下机器家族选项可供选择:

      • 通用
      • 计算优化
      • 内存优化
      • 存储优化
      • GPU 数量

    4. 系列列中,选择实例的机器系列。

    5. 机器类型部分中,为实例选择机器类型。

  4. 在导航菜单中,点击网络。在显示的网络窗格中,执行以下操作:

    1. 网络接口部分中,点击网络接口以展开并修改它。

    2. 对于网络子网,请选择已配置 IPv6 范围的网络和子网。

      子网的 IPv6 访问权限类型决定了实例是接收内部 IPv6 地址还是外部 IPv6 地址。如需分配内部 IPv6 地址,您必须选择使用为此 VPC 网络配置 ULA 内部 IPv6 范围选项创建的网络。否则,您只能配置外部 IPv6 地址。

    3. 对于 IP 栈类型,选择 IPv6(单栈)

    4. 如果您选择的子网的访问类型为 Internal,则在主要内部 IPv6 地址字段中,选择以下选项之一:

      • 如需分配新的临时 IPv6 地址,请选择自动分配 (96)
      • 如需分配现有的静态内部 IP 地址,请从列表中选择预留的 IPv6 地址的名称。
      • 如需创建并分配新的静态内部 IPv6 地址,请选择预留静态内部 IPv6 地址
    5. 如果您选择的子网的访问类型为 External,则对于外部 IPv6 地址,请选择以下选项之一:

      • 如需分配新的临时外部 IPv6 地址,请选择自动分配
      • 如需分配现有的静态外部 IP 地址,请从列表中选择预留的 IPv6 地址的名称。
      • 如需创建并分配新的静态外部 IPv6 地址,请选择预留静态外部 IPv6 地址
    6. 如需完成网络接口的修改,请点击完成

    7. 可选:如需添加其他 IPv6 地址,请执行以下操作:

      1. 选择添加网络接口
      2. 网络窗格重复此任务中的前面步骤。
  5. 可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项

  6. 要创建并启动该实例,请点击创建

使用 gcloud beta compute instances create 命令创建实例。如需同时分配内部和外部 IPv6 地址,您必须创建至少具有两个网络接口的实例。

gcloud beta compute instances create INSTANCE_NAME \
    --zone ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,image='projects/IMAGE_PROJECT/global/images/IMAGE',size=SIZE \
    --network-interface=subnet=SUBNET_INTERNAL_NAME,stack-type=IPV6_ONLY \
    --network-interface=subnet=SUBNET_EXTERNAL_NAME,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM

替换以下内容:

  • INSTANCE_NAME:实例的名称
  • ZONE:在其中创建实例的可用区,例如 europe-west1-b。实例的区域是根据地区推断出来的。
  • MACHINE_TYPE:可选:新实例的机器类型,预定义自定义例如 n4-standard-2
  • IMAGE_PROJECT:可选:包含映像的映像项目
  • IMAGE(可选):指定以下其中一项:
    • 操作系统映像的特定版本,例如 debian-12-bookworm-v202410095
    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践
  • SIZE:可选:新磁盘的大小。 值必须为整数。默认的测量单位为 GiB。
  • SUBNET_INTERNAL_NAME:为内部 IP 地址配置的子网的名称,以便与实例搭配使用。
  • SUBNET_EXTERNAL_NAME:为外部 IP 地址配置的子网名称,以便与实例搭配使用。
  1. 选择一个映像。请记下映像或映像系列的名称以及包含该映像的项目的名称。
  2. 使用 instances.insert 方法通过映像系列或特定版本的操作系统映像创建实例:

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:要在其中创建实例的项目的 ID。
    • ZONE:要在其中创建实例的可用区。
    • MACHINE_TYPE_ZONE:如果使用自定义机器类型,请指定包含要用于新实例的自定义机器类型的可用区;否则,请指定要用于创建实例的可用区。
    • MACHINE_TYPE:新实例的预定义自定义机器类型,例如 n4-standard-2
    • INSTANCE_NAME:新实例的名称
    • REGION:子网所在的区域
    • SUBNET_INTERNAL:仅限 IPv6 的子网。此子网的网络必须具有 INTERNAL 访问权限类型,并且已启用 IPv6 ULA。
    • SUBNET_EXTERNAL:仅限 IPv6 的子网。此子网的网络必须具有 INTERNAL 访问权限类型。
    • IMAGE_PROJECT:可选:包含映像的映像项目
    • IMAGE(可选):指定以下其中一项:

      • 操作系统映像的特定版本,例如 debian-12-bookworm-v20241009
      • 映像系列,其格式必须为 family/IMAGE_FAMILY。 此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

    HTTP 方法和网址:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

    请求 JSON 正文:

    {
        "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
        "name": "INSTANCE_NAME",
        "networkInterfaces": [
          {
            "subnetwork": "regions/REGION/subnetworks/SUBNET_INTERNAL",
            "stackType": "IPV6_ONLY"
          },
          {
            "subnetwork": "regions/REGION/subnetworks/SUBNET_EXTERNAL",
            "stackType": "IPV6_ONLY"
          }
        ],
        "disks": [
          {
            "initializeParams": {
              "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
    
            },
            "boot": true
          }
        ]
    }
    

    如需发送您的请求,请展开以下选项之一:

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances"

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances" | Select-Object -Expand Content

    您应该收到类似以下内容的 JSON 响应:

    {
      "kind": "compute#operation",
      "id": "9216044482154695709",
      "name": "operation-1739207409646-62dccc7d7bc58-d1350b42-64fdb7f7",
      "zone": "https://www.googleapis.com/compute/beta/projects/`PROJECT_ID`/zones/`ZONE`",
      "operationType": "insert",
      "targetLink": "https://www.googleapis.com/compute/beta/projects/`PROJECT_ID`/zones/`ZONE`/instances/`INSTANCE_NAME`",
      "targetId": "2679381553616227357",
      "status": "RUNNING",
      "user": "USER_ID",
      "progress": 0,
      "insertTime": "2025-02-10T09:10:10.551-08:00",
      "startTime": "2025-02-10T09:10:10.551-08:00",
      "selfLink": "https://www.googleapis.com/compute/beta/projects/`PROJECT_ID`/zones/`ZONE`/operations/operation-1565289606387-58f9f62f5989c-e582f586-6d22f38"
     "kind": "compute#operation"
    }
    

后续步骤