双栈子网使您的 Cloud Run 资源可以通过直接 VPC 出站流量将 IPv4 和 IPv6 流量发送到 VPC 网络。 您可以将现有的仅限 IPv4(单栈)子网更改为双栈子网。
子网类型
VPC 网络支持以下 Compute Engine 子网类型:
双栈限制
在更改现有 Cloud Run 资源上的栈类型之前,请考虑以下限制:
只有自定义模式 VPC 网络中的子网支持双栈。如需让双栈子网可使用内部访问权限类型,必须启用 VPC 网络内部 IPv6 范围。设置 VPC 网络或将其转换为自定义模式。
与仅 IPv4 子网相比,双栈子网可能会出现冷启动延迟时间增加,从而限制应用的扩容速度。
不支持 NAT64。
准备工作
请确保 Cloud Run 服务代理具有 Compute Public IP Admin 角色 (roles/compute.publicIpAdmin),才能使用具有外部 IPv6 的子网。
在资源中添加双栈子网
双栈子网同时具有 IPv4 和 IPv6 地址范围。
如需在 Cloud Run 资源中添加双栈子网,请执行以下操作:
控制台
在 Google Cloud 控制台中:
启用 Compute Engine API:
前往 VPC 网络页面:
如果您要创建新的自定义模式网络,请点击创建 VPC 网络。如果您使用的是现有 VPC 网络,请点击该 VPC 网络的名称以显示其 VPC 网络详情页面。
如果您要创建新网络或转换现有网络,请输入名称,并确保子网创建模式设置为自定义,然后选择为此 VPC 网络配置 ULA 内部 IPv6 范围。
在子网标签页上,点击添加子网。在显示的面板中:
- 提供名称。
- 选择区域。
- 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)。
- 输入 IPv4 范围。这是子网的主要 IPv4 地址范围。
选择 IPv6 访问权限类型。
如果内部选项不可用,但您需要使用该选项,请检查是否为网络分配了内部 IPv6 范围。
点击添加。
在您创建的双栈子网上部署 Cloud Run 服务、执行作业或部署工作器池。在输入所需的资源详细信息时,请按照以下步骤选择新的 IPv6 地址范围:
- 点击容器、卷、网络、安全性,然后选择网络标签页。
- 依次点击连接到 VPC 以获取出站流量和将流量直接发送到 VPC。
- 选择您在上一步中创建的网络。
- 点击子网字段,选择新创建的 IPv6 地址范围。
系统会使用子网的栈类型自动预配资源。
gcloud
如需创建支持双栈子网的自定义模式网络,请运行
gcloud compute networks create命令:如需在此网络的任何子网上配置内部 IPv6 范围,请使用
--enable-ula-internal-ipv6标志。此选项会在 Google Cloud 用于内部 IPv6 子网范围的fd20::/20范围内分配/48ULA 前缀。gcloud compute networks create NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
将
NETWORK替换为包含新子网的 VPC 网络的名称。如需转换为自定义模式网络或更新自定义模式网络以支持双栈子网,请运行以下命令:
gcloud compute networks update NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
将
NETWORK替换为包含新子网的 VPC 网络的名称。如需创建具有 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 访问权限类型internal或external。REGION:将在其中创建新子网的 Google Cloud 区域。
在您创建的双栈子网上部署 Cloud Run 服务、执行作业或部署工作器池。系统会使用子网的栈类型自动预配资源。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
更新以下属性:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
您需要进行如下替换:
- 将 SERVICE_NAME 替换为您的 Cloud Run 服务的名称。服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 REGION 替换为 Cloud Run 服务的区域,该区域必须与子网的区域一致。
- 将 NETWORK 替换为 VPC 网络的名称。
- 将 SUBNET 替换为您的子网名称。 您可以在同一子网上部署或执行多个服务、作业或工作器池。
- 可选:将 NETWORK_TAG_NAMES 替换为要与服务关联的网络标记的名称。对于服务,网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如
network-tag-2。 - 将 EGRESS_SETTING 替换为出站流量设置值:
all-traffic:通过 VPC 网络发送所有出站流量。private-ranges-only:仅发送通过 VPC 网络发送到内部地址的流量。
- 将 IMAGE 替换为服务容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
请将以下内容添加到
main.tf文件:
(可选)如果您想允许对服务进行未经身份验证的访问,请将服务设为公开。
将子网从单栈更改为双栈
如需将 IPv6 子网范围添加到自定义模式 VPC 网络中的现有仅限 IPv4 子网,请参阅将子网的栈类型更改为双栈。 然后,在双栈子网上部署 Cloud Run 服务、执行作业或部署工作器池。
将子网从双栈更改为单栈
如需将资源的双栈子网更改为单栈子网,请参阅将双栈子网更改为仅限 IPv4 子网。 然后,在双栈子网上部署 Cloud Run 服务、执行作业或部署工作器池。
验证网络和子网
如需检查您的资源是否在 VPC 网络上,请运行以下命令:
gcloud run services describe SERVICE_NAME --region=REGION
将 REGION 替换为在其中创建新子网的 Google Cloud 区域。
以下示例输出显示了您的网络和子网:
VPC Access:
Network: example-network
Subnet: example-subnet
Egress: private-ranges-only