使用 VPC 网络的直接 VPC 出站流量

您可以启用 Cloud Run 服务或作业,以通过直接 VPC 出站流量将流量发送到 VPC 网络,而无需无服务器 VPC 访问通道连接器。

须知事项

  • 如果您的项目中还没有 VPC 网络,请创建一个 VPC 网络

  • 如果您使用共享 VPC,请参阅连接到共享 VPC 网络

  • 如果使用 VPC 子网,则子网必须为 /24 或更大。

  • 为了确保有足够的 IP 地址可在 Cloud Run 中使用,请注意以下条件:

    • 您计划部署 Cloud Run 服务或修订版本的子网必须至少具有数百个可用的 IP 地址。
    • 在稳定状态下,如果使用该子网的 Cloud Run 实例总数为 100 个或更多,请预留足够的 IP 地址,至少应为实例数的 4 倍 (4X)。请注意,修订版本缩容时,Cloud Run 会将其 IP 地址保留最多 20 分钟。例如,如果您升级修订版本,使 revision 1 从 100 个实例缩减到零,而 revision 2 从零扩容到 100,则 Cloud Run 会在缩容之后将 revision 1 IP 地址地址保留最多 20 分钟。在这种情况下,在这个 20 分钟的时间窗口内,您必须至少预留 800 个 IP 地址 ((100 + 100) * 4)。

限制

以下限制同时适用于 Cloud Run 服务和作业:

  • Cloud Run 支持每个实例具有高达 1 Gbps 的吞吐量。超过此数量会导致性能限制。
  • Cloud Run 用量配额限制了您可以配置为使用直接 VPC 出站流量的实例数上限。数量上限为每个 Cloud Run 修订版本或作业执行配置。如需提高默认限制,请参阅如何增加配额。您可以使用 Google Cloud 控制台查看您的配额

  • 在网络基础设施维护事件期间,Cloud Run 服务和作业可能会遇到连接中断。我们建议您使用可以处理偶尔的连接重置的客户端库。
以下限制仅适用于 Cloud Run 作业,而不适用于服务:
  • Cloud Run 作业的直接 VPC 出站流量仅在预览版中可用。
  • 为了确保作业正确执行,请仅为不需要超过 8 个并发实例的作业使用直接 VPC 出站流量,并确保至少预留 1,024 个 IP 地址。

直接 VPC 出站流量不支持以下各项:

  • VPC 流日志不提供 Cloud Run 服务的名称或修订版本。
  • 非虚拟机资源(如 Cloud Run 或本地机器)不会报告 VPC 流日志。
  • 防火墙规则日志记录
  • 数据包镜像
  • Network Intelligence Center
  • IPv6 流量
  • 在应用于目标资源的入站防火墙规则中使用网络标记
  • 在应用于目标资源的入站防火墙规则中使用服务身份作为来源服务账号。
  • 防火墙规则不能使用附加到 Cloud Run 工作负载的 Resource Manager 标记。
  • 运行时间超过 1 小时的 Cloud Run 作业可能会遇到连接中断。在将作业从一个机器迁移到另一个机器的维护事件中,可能会发生这种情况。容器会在事件发生前 10 秒收到 SIGTSTP 信号,在事件之后收到 SIGCONT 信号。容器收到 SIGCONT 信号后,请重试连接。

IP 地址分配

如需将 Cloud Run 服务或作业置于 VPC 网络中,您必须指定网络和子网。Cloud Run 会分配子网中的 IP 地址。

IP 地址是临时性的,因此请勿基于各个 IP 创建政策。如果您需要基于 IP 创建政策(例如防火墙规则),则必须使用整个子网的 IP 地址范围。

如需更改服务或作业使用的网络或子网,请部署新的服务修订版本或执行使用新的网络和子网值的新作业任务。

纵向扩容

为在发生流量激增时实现快速扩容,Cloud Run 会在需要 IP 地址之前进行分配。

在任何给定时间,已分配的 IP 地址数量都可能超过存在的实例数量。为了确保 Cloud Run 能够获取足够的 IP 地址,请确保子网至少具有数百个可用的 IP 地址。如果所有 Cloud Run 服务和作业的子网实例总数超过 100 个,我们建议至少有总数 4 倍 (4X) 的实例可用。如果 Cloud Run 无法分配更多 IP 地址,则除非更多 IP 地址变为可用,否则无法再启动更多服务实例或作业任务。如果您的 IP 地址空间有限,请参阅支持的 IP 范围以了解更多选项。为了提高 IP 分配效率和易于管理,请将多个服务或作业置于同一子网中。

纵向缩容

即使在所有服务或作业都缩减到零之后,Cloud Run 也会从子网预留一些 IP 地址长达 20 分钟,以防服务或作业必须再次快速扩容。每个实例都需要一个 IP 地址,但 Cloud Run 会在开始时预留至少 /28 子网掩码。用完所有 16 个实例后,Cloud Run 会创建一个新子网。

如需删除子网,您必须先删除或重新部署 Cloud Run 服务或作业以停止使用子网,然后等待 1-2 小时。

支持的 IP 范围

Cloud Run 支持子网的以下 IPv4 范围:

  • RFC 1918(推荐)
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • E 类(本地设置不推荐使用)
    • 240.0.0.0/4

设置 IAM 权限

使用以下方法之一确保 Cloud Run 可以访问 VPC 网络:

  • Cloud Run Service Agent 角色:默认情况下,Cloud Run 服务代理具有 Cloud Run Service Agent 角色 (roles/run.serviceAgent),该角色含有必要的权限。

  • 自定义权限:如需进行更精细的控制,请向 Cloud Run 服务代理授予对项目的以下额外权限:

    • compute.networks.get
    • compute.subnetworks.get
    • 项目或特定子网的 compute.subnetworks.use 权限
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
  • Compute Network User 角色:如果您不使用默认 Cloud Run Service Agent 角色或自定义权限,请运行以下命令,在 Cloud Run Service Agent 服务账号上授予 Compute Network User 角色 (roles/compute.networkUser)

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"

    替换以下内容:

    • PROJECT_ID:您的项目的 ID。
    • PROJECT_NUMBER:您在其中部署 Cloud Run 服务或作业的项目编号。

部署服务

借助直接 VPC 出站流量,您的 Cloud Run 服务可以将流量发送到没有无服务器 VPC 访问通道连接器的 VPC 网络。与服务本身一样,网络费用缩减至零。您还可以直接在 Cloud Run 服务修订版本上添加网络标记,以实现更精细的网络安全性,例如应用 VPC 防火墙规则

您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 通过服务配置直接 VPC 出站流量。

控制台

  1. 转到 Cloud Run

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置和部署现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击网络标签页。

  5. 点击连接到 VPC 以获取出站流量

  6. 点击将流量直接发送到 VPC

  7. 网络字段中,选择要向其发送流量的 VPC 网络。

  8. 子网字段中,选择您的服务用于接收 IP 地址的子网。 您可以在同一子网上部署多个服务。

  9. 可选:输入要与服务关联的网络标记的名称。网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如 network-tag-2

  10. 流量路由部分,选择以下选项之一:

    • 仅将请求路由到 VPC 的专用 IP,以便通过 VPC 网络将流量仅发送到内部地址。
    • 将所有流量路由到 VPC,以通过 VPC 网络发送所有出站流量。
  11. 点击创建部署

  12. 如需验证您的服务是否在 VPC 网络上,请点击该服务,然后点击网络标签页。VPC 卡片中列出了网络和子网。

    现在,您可以根据防火墙规则允许将来自 Cloud Run 服务的请求发送到 VPC 网络上的任何资源。

gcloud

如需通过 Google Cloud CLI 部署没有连接器的 Cloud Run 服务,请执行以下操作:

  1. gcloud 组件更新到最新版本:

    gcloud components update
  2. 确保已为您的项目启用了 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用以下命令部署 Cloud Run 服务:

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION

    您需要进行如下替换:

    • SERVICE_NAME 替换为您的 Cloud Run 服务的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • NETWORK 替换为 VPC 网络的名称。
    • SUBNET 替换为您的子网名称。 您可以在同一子网上部署或执行多个服务或作业。
    • 可选:将 NETWORK_TAG_NAMES 替换为要与服务关联的网络标记的名称。对于服务,网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如 network-tag-2
    • EGRESS_SETTING 替换为出站流量设置值
      • all-traffic:通过 VPC 网络发送所有出站流量。
      • private-ranges-only:仅发送通过 VPC 网络发送到内部地址的流量。
    • REGION 替换为您的服务的区域。
  4. 如需验证您的服务是否在 VPC 网络上,请运行以下命令:

    gcloud run services describe SERVICE_NAME \
    --region=REGION

    您需要进行如下替换:

    • SERVICE_NAME 替换为您的服务名称。
    • REGION 替换为您在上一步中指定的服务的区域。

    输出应包含网络的名称、子网和出站流量设置,例如:

    VPC access:
      Network:       default
      Subnet:        subnet
      Egress:        private-ranges-only
    

现在,您可以根据防火墙规则允许将来自 Cloud Run 服务的请求发送到 VPC 网络上的任何资源。

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新以下属性:

    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 替换为服务容器映像的网址。

    您还可以指定更多配置,例如环境变量或内存限制。

  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

  1. 请将以下内容添加到 main.tf 文件:

    /**
     * Copyright 2024 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    # Example configuration of a Cloud Run service with direct VPC
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "cloudrun-service"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        vpc_access {
          network_interfaces {
            network    = "default"
            subnetwork = "default"
            tags       = ["tag1", "tag2", "tag3"]
          }
        }
      }
    }
    

(可选)如果您想允许对服务进行未经身份验证的访问,请将服务设为公开

创建作业

借助直接 VPC 出站流量,您的 Cloud Run 作业可以将流量发送到没有无服务器 VPC 访问通道连接器的 VPC 网络。 您还可以直接在 Cloud Run 作业上添加网络标记,以实现更精细的网络安全性,例如应用 VPC 防火墙规则

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 通过作业配置直接 VPC 出站流量。

控制台

  1. 转到 Cloud Run

  2. 如果您要配置新作业,请点击作业标签页,然后根据需要填写初始作业设置页面。如果要配置现有作业,请点击作业,然后点击修改

  3. 点击容器、变量和 Secret、连接、安全性以展开作业属性页面。

  4. 点击连接标签页。

  5. 点击连接到 VPC 以获取出站流量

  6. 点击将流量直接发送到 VPC

  7. 网络字段中,选择要向其发送流量的 VPC 网络。

  8. 子网字段中,选择您的作业用于接收 IP 地址的子网。 您可以在同一子网上执行多个作业。

  9. 流量路由部分,选择以下选项之一:

    • 仅将请求路由到 VPC 的专用 IP,以便通过 VPC 网络将流量仅发送到内部地址。
    • 将所有流量路由到 VPC,以通过 VPC 网络发送所有出站流量。
  10. 可选:输入要与服务关联的网络标记的名称。网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如 network-tag-2

  11. 可选:输入要与作业关联的网络标记的名称。对于作业,网络标记在执行级指定。每个作业执行都可以具有不同的网络标记,例如 network-tag-2

  12. 点击创建更新

  13. 如需验证您的作业是否在 VPC 网络上,请点击该作业,然后点击配置标签页。VPC 卡片中列出了网络和子网。

    现在,您可以根据防火墙规则允许执行 Cloud Run 作业,并将作业的请求发送到 VPC 网络上的任何资源。

gcloud

如需在 Google Cloud CLI 中创建没有连接器的 Cloud Run 作业,请执行以下操作:

  1. gcloud 组件更新到最新版本:

    gcloud components update
  2. 确保已为您的项目启用了 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用以下命令创建 Cloud Run 作业:

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION

    您需要进行如下替换:

    • JOB_NAME 替换为 Cloud Run 作业的名称。
    • IMAGE_URL 替换为对容器映像的引用(例如 us-docker.pkg.dev/cloudrun/container/job:latest)。
    • NETWORK 替换为 VPC 网络的名称。
    • SUBNET 替换为您的子网名称。 您可以在同一子网上部署或执行多个服务或作业。
    • 可选:将 NETWORK_TAG_NAMES 替换为要与作业关联的网络标记的名称。对于作业,网络标记在执行级指定。每个作业执行都可以具有不同的网络标记,例如 network-tag-2
    • EGRESS_SETTING 替换为出站流量设置值
      • all-traffic:通过 VPC 网络发送所有出站流量。
      • private-ranges-only:仅发送通过 VPC 网络发送到内部地址的流量。
    • REGION 替换为作业的区域。
  4. 如需验证作业是否在 VPC 网络中,请运行以下命令:

    gcloud run jobs describe JOB_NAME \
      --region=REGION
      

    您需要进行如下替换:

    • JOB_NAME 替换为作业的名称。
    • REGION 替换为您在上一步中指定的作业的区域。

    输出应包含网络和子网的名称,例如:

    VPC network:
      Network:       default
      Subnet:        default
    

现在,您可以根据防火墙规则允许执行 Cloud Run 作业,并将作业的请求发送到 VPC 网络上的任何资源。

YAML

  1. 如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 更新以下属性:

    apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: JOB_NAME
        annotations:
          run.googleapis.com/launch-stage: BETA
        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

    您需要进行如下替换:

    • JOB_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 替换为作业容器映像的网址。
  3. 使用以下命令创建或更新作业:

    gcloud run jobs replace job.yaml

使用防火墙规则限制访问权限

使用 VPC 防火墙规则限制对 VPC 网络中资源的访问权限。使用以下策略之一添加这些限制:

  • 使用子网的 IP 范围创建一个引用您的服务作业的入站防火墙规则。
  • 创建一个引用您的服务作业的出站防火墙规则。

    在出站防火墙规则中,使用关联的服务账号服务身份、子网的 IP 范围,或者关联的网络标记来引用服务或作业。

出站网络标记

在出站防火墙规则中使用网络标记,额外增加一层网络安全。

控制台

如需将网络标记与服务或作业关联,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud Run 页面。

    转到 Cloud Run

  2. 点击要与网络标记关联的服务或作业,然后针对服务点击修改和部署新修订版本,或针对作业点击修改

  3. 针对服务,点击网络标签页,或针对作业,点击连接标签页。

  4. 确保您已选择连接到 VPC 以接收出站流量将流量直接发送到 VPC

  5. 子网字段中,选择您的服务用于接收 IP 地址的子网。您可以在同一子网上部署或执行多个服务或作业。

  6. 网络标记字段中,输入要与服务或作业关联的网络标记的名称。

  7. 点击部署更新

对于服务,每个服务修订版本都可以有一组不同的网络标记,因为网络标记是在修订版本级层指定的。对于作业,作业执行的网络标记与创建作业执行时作业的网络标记相同。

gcloud

如需将网络标记与服务或作业关联,请使用 gcloud run deploy 命令:

gcloud run deploy SERVICE_JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --region=REGION

替换以下内容:

  • SERVICE_JOB_NAME 替换为您的服务或作业的名称。
  • IMAGE_URL 替换为服务或作业的映像网址。
  • NETWORK 替换为 VPC 网络的名称。
  • SUBNET 替换为您的子网名称。 您可以在同一子网上部署或执行多个服务或作业。
  • NETWORK_TAG_NAMES 替换为网络标记的名称或以逗号分隔的网络标记列表。
  • REGION 替换为您的区域名称。

对于服务,每个服务修订版本都可以有一组不同的网络标记,因为网络标记是在修订版本级层指定的。对于作业,作业执行的网络标记与创建作业执行时作业的网络标记相同。

断开服务连接

控制台

  • 如需从 VPC 网络中移除服务,请执行以下操作:

    1. 转到 Cloud Run

    2. 点击要移除的服务,然后点击修改和部署新的修订版本

    3. 点击网络标签页。

    4. 清除连接到 VPC 以获取出站流量

    5. 点击部署

    6. 如需验证您的服务是否不再位于 VPC 网络上,请点击网络标签页。VPC 卡片中不再列出网络和子网。

  • 如需仅移除网络标记,同时保持服务与 VPC 网络的连接,请执行以下操作:

    1. 点击包含要移除的网络标记的服务,然后点击修改和部署新的修订版本

    2. 点击网络标签页。

    3. 清除您不再希望与服务关联的网络标记的名称。

    4. 点击部署

gcloud

  • 如需从 VPC 网络中移除服务,请运行以下命令:

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network
  • 如需仅移除网络标记,同时保持服务与 VPC 网络的连接,请运行以下命令:

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network-tags

    替换以下内容:

    • SERVICE_NAME:Cloud Run 服务的名称。
    • REGION:Cloud Run 服务的区域。

YAML

  • 如需从 VPC 网络中移除服务,请执行以下操作:

    1. 下载服务的 YAML 配置

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. service.yaml 文件中移除以下内容:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      地点

      • NETWORK:您的 VPC 网络的名称。
      • SUBNET:您的子网的名称。
      • 可选:NETWORK_TAG_NAMES:网络标记的名称(如果已将其与服务关联)。
    3. 通过运行以下命令来部署服务修订版本:

      gcloud run services replace service.yaml
  • 如需仅移除网络标记,同时保持服务与 VPC 网络的连接,请执行以下操作:

    1. 下载服务的 YAML 配置

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. service.yaml 文件的内容中移除 tags 变量,并保持 networksubnetwork 变量不变,如以下示例所示:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'

      地点

      • NETWORK:您的 VPC 网络的名称。
      • SUBNET:您的子网的名称。
    3. 通过运行以下命令来部署服务修订版本:

      gcloud run services replace service.yaml

断开连接作业

控制台

  • 如需从 VPC 网络中移除作业,请执行以下操作:

    1. 转到 Cloud Run

    2. 点击要移除的作业,然后点击修改和部署新的修订版本

    3. 点击连接标签页。

    4. 清除连接到 VPC 以获取出站流量

    5. 点击更新

    6. 如需验证您的作业是否不再位于 VPC 网络上,请点击配置标签页。VPC 卡片中不再列出网络和子网。

  • 如需仅移除网络标记,同时保持作业与 VPC 网络连接,请执行以下操作:

    1. 点击包含要移除的网络标记的作业,然后点击修改和部署新的修订版本

    2. 点击连接标签页。

    3. 清除您不再希望与作业关联的网络标记的名称。

    4. 点击更新

gcloud

  • 如需从 VPC 网络中移除作业,请运行以下命令:

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network
      
  • 如需仅移除网络标记,同时保持作业与 VPC 网络的连接,请运行以下命令:

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network-tags
      

    替换以下内容:

    • JOB_NAME:Cloud Run 作业的名称
    • REGION:Cloud Run 作业所在的区域。

YAML

  • 如需从 VPC 网络中移除作业,请执行以下操作:

    1. 下载作业的 YAML 配置

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. job.yaml 文件中移除以下内容:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      替换以下内容:

      • NETWORK:您的 VPC 网络的名称。
      • SUBNET:您的子网的名称。
      • 可选:如果您已将网络标记与作业相关联,则将 NETWORK_TAG_NAMES 替换为网络标记的名称。
    3. 通过运行以下命令来更新作业:

      gcloud run jobs replace job.yaml
  • 如需仅移除网络标记,同时保持作业与 VPC 网络连接,请执行以下操作:

    1. 下载作业的 YAML 配置

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. job.yaml 文件的内容中移除 tags 变量,并保持 networksubnetwork 变量不变,如以下示例所示:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'

      替换以下内容:

      • NETWORK:您的 VPC 网络的名称。
      • SUBNET:您的子网的名称。
    3. 通过运行以下命令来更新作业:

      gcloud run jobs replace job.yaml

问题排查

无法删除子网

如需删除子网,您必须先删除或重新部署使用该子网的所有资源。如果 Cloud Run 使用子网,请将 Cloud Run 服务作业与 VPC 网络断开连接,或将其移至其他子网,然后才能删除子网。

直接 VPC 子网耗尽 IP 地址

如果 VPC 网络的子网耗尽 IP 地址,则由 Cloud Logging 记录。发生这种情况时,Cloud Run 无法启动更多服务实例或作业任务,直到更多 IP 地址变为可用为止。

查看分配的 IP 地址

如需查看 Cloud Run 分配的 IP 地址,请转到 Google Cloud 控制台中的“IP 地址”页面,或从 Google Cloud CLI 运行以下命令:

gcloud compute addresses list