设置双栈(IPv4 和 IPv6)

双栈子网使您的 App Engine 资源可以通过直接 VPC 出站流量将 IPv4 和 IPv6 流量发送到 VPC 网络。 您可以将现有的仅 IPv4(单栈)子网更改为双栈子网。

子网类型

VPC 网络支持以下 Compute Engine 子网类型

双栈限制

在更改现有 App Engine 资源上的栈类型之前,请考虑以下限制:

  • 双栈支持仅适用于自定义模式 VPC 网络中的子网。如需为双栈子网提供内部访问权限类型,必须启用 VPC 网络内部 IPv6 范围。设置 VPC 网络或将其转换为自定义模式。

  • 与仅 IPv4 子网相比,双栈子网可能会出现冷启动延迟时间增加,从而限制应用的扩容速度。

  • NAT64

准备工作

确保 App Engine 服务代理具有 Compute Public IP Admin 角色 (roles/compute.publicIpAdmin),才能使用具有外部 IPv6 的子网。

设置双栈子网

双栈子网同时具有 IPv4 和 IPv6 地址范围。

如需设置双栈子网,您可以使用 Google Cloud 控制台或 Google Cloud CLI:

控制台

  1. 前往 Google Cloud 控制台并启用 Compute Engine API:

    启用 Compute Engine API

  2. 导航到 VPC 网络 页面:

    进入 VPC 网络页面

  3. 如果您要创建新的自定义模式网络,请点击 创建 VPC 网络 。 如果您使用的是现有 VPC 网络,请点击该 VPC 网络的名称以显示其 VPC 网络详情页面。

  4. 如果您要创建新网络或转换现有网络,请输入名称,并确保子网创建模式设置为自定义,然后选择为此 VPC 网络配置 ULA 内部 IPv6 范围

  5. 子网标签页上,点击添加子网。在显示的面板中:

    1. 提供名称
    2. 选择区域
    3. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
    4. 输入 IPv4 范围。这是子网的主要 IPv4 地址范围
    5. 选择 IPv6 访问权限类型

      如果内部 选项不可用但您需要使用该选项,请检查是否为网络分配了内部 IPv6 范围。

    6. 点击 Add (添加)。

gcloud

  1. 如需创建支持双栈子网的自定义模式网络,请运行 gcloud compute networks create 命令:

    如需在此网络的任何子网上配置内部 IPv6 范围,请使用 --enable-ula-internal-ipv6 标志。此选项会在 Google Cloud 用于内部 IPv6 子网范围的 fd20::/20 范围内分配 /48 ULA 前缀。

    gcloud compute networks create NETWORK \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6

    NETWORK 替换为包含新子网的 VPC 网络的名称。

  2. 如需转换为自定义模式网络或更新自定义模式网络以支持双栈子网,请运行以下命令:

    gcloud compute networks update NETWORK \
      --switch-to-custom-subnet-mode \
      --enable-ula-internal-ipv6

    NETWORK 替换为包含新子网的 VPC 网络的名称。

  3. 如需创建具有 IPv6 范围的双栈子网,请使用双栈设置运行 subnets create 命令

    gcloud compute networks subnets create SUBNET \
      --network=NETWORK \
      --range=PRIMARY_IPv4_RANGE \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=IPV6_ACCESS_TYPE \
      --region=REGION

    替换以下内容:

    • SUBNET:新子网的名称。
    • NETWORK:将包含新子网的 VPC 网络的名称。
    • PRIMARY_IPv4_RANGE:新子网的主要 IPv4 范围(采用 CIDR 表示法)。如需了解详情,请参阅 IPv4 子网范围
    • IPV6_ACCESS_TYPE:新子网的 IPv6 访问权限类型 internalexternal
    • REGION:将在其中创建新 子网的 Google Cloud 区域。

将双栈子网添加到 App Engine 资源

创建双栈子网后,请将 App Engine 服务配置为使用该子网:

  1. app.yaml 文件中,在 vpc_access 字段中指定网络和子网:

    vpc_access:
      network_interface:
        network: NETWORK
        subnet: SUBNET
      vpc_egress: EGRESS_SETTING

    替换以下内容:

    • NETWORK:您在上一步中创建的网络的名称。

    • SUBNET:您在上一步中创建的子网的名称。

    • 可选:EGRESS_SETTING:控制如何路由出站流量。此字段支持以下配置设置:

      • all-traffic:所有出站请求都通过 VPC 网络路由。
      • private-ranges-only (默认):只有发送到内部 IP 地址的流量通过 VPC 网络路由。互联网流量使用默认的 App Engine 路径。
  2. 运行以下命令以部署到 App Engine:

    gcloud beta app deploy

将子网从单栈更改为双栈

如需将 IPv6 子网范围添加到自定义模式 VPC 网络中的现有仅限 IPv4 子网,请参阅将子网的栈类型更改为双栈。 然后,在双栈子网上部署 App Engine 服务。

将子网从双栈更改为单栈

如需将资源的双栈子网更改为单栈子网,请参阅 将双栈子网更改为仅限 IPv4 子网。 然后,在双栈子网上部署 App Engine 服务。

验证网络和子网

如需检查您的资源是否在 VPC 网络上,请运行以下命令:

gcloud beta app versions describe VERSION --service=SERVICE

替换以下内容:

  • VERSION:已部署的服务版本
  • SERVICE:已部署的服务

以下示例输出显示了您的网络和子网:

  vpcAccess:
  networkInterfaces:
  - network: projects/YOUR_PROJECT/global/networks/YOUR_NETWORK
    subnet: projects/YOUR_PROJECT/regions/YOUR_REGION/subnetworks/YOUR_SUBNET
  vpcEgress: ALL_TRAFFIC/PRIVATE_RANGES_ONLY