You can enable your Cloud Run service, function, job, or worker pool to send traffic to a VPC network by using Direct VPC egress with no Serverless VPC Access connector required.
Cloud Run services and jobs don't support Direct VPC ingress. To configure Direct VPC ingress for worker pools only, see Cloud Run worker pools ingress.
If you don't already have a VPC network in your project, create one.
If you use Shared VPC with Cloud Run services or jobs, see Connecting to a Shared VPC network.
Review the following IP address configuration sections:
IP address allocation for guidance with allocating IP addresses from your subnet.
IP address exhaustion strategies for using alternative IP address ranges.
SIGTSTP signal 10 seconds before the event and a
SIGCONT signal after the event. After the container receives the
SIGCONT signal, retry the connection.A Cloud Run usage quota limits the maximum number of instances you can configure to use Direct VPC egress. The maximum number is configured per Cloud Run revision or job execution. To increase the default limits, see how to increase quotas.
The following items are not supported by Direct VPC egress:
To place your Cloud Run service, job, or worker pool on a VPC network, specify either a VPC network or a subnet, or both. If you specify only a network, the subnet uses the same name as the network. Cloud Run allocates IP addresses from your subnet.
IP addresses are ephemeral, so don't create policies based on individual IPs. If you need to create a policy based on IPs, such as in firewall rules, you must use the IP address range of the entire subnet.
To change the network or subnet that your service, job, or worker pool uses, deploy a new revision or execute a new job task that uses the new network and subnet values.
For faster scale up during a traffic surge, Cloud Run reserves IP
addresses in blocks of 16 (28 subnet mask) at a time.
See which IP addresses Cloud Run has allocated.
To ensure that you have enough IPv4 addresses available for use across
Cloud Run, your subnet's IPv4 address range must be /26 or
larger.
For IP allocation efficiency and ease of management, place multiple resources on the same subnet. If your IPv4 address space is limited, see Supported IPv4 ranges for more options.
To delete the subnet, you must first delete or redeploy your Cloud Run services, jobs, or worker pools to stop using the subnet, and then wait 1-2 hours.
At steady state, Cloud Run uses 2 times (2X) as many IP addresses as the number of instances. When a revision scales down, Cloud Run retains its IP addresses for up to 20 minutes. In total, reserve at least 2X the number of IP addresses, plus a buffer to account for revision updates.
For example, if you upgrade revisions so that revision 1 scales from 100
instances down to zero while revision 2 scales from zero up to 100,
Cloud Run retains the revision 1 IP addresses for up to 20
minutes after scaling down. During the 20-minute retention window, you must
reserve at least 400 IP addresses ((100 + 100) * 2).
For Cloud Run jobs, each task consumes 1 IP address for the
duration of its execution plus 7 minutes after it completes. Ensure that your
subnet is large enough to accommodate all concurrent job task executions, with
a minimum reservation /26 subnet required.
For example:
Cloud Run supports the following IPv4 ranges for your subnet:
Ensure that Cloud Run has access to the VPC network by using one of the following methods:
Cloud Run Service Agent role: By default, the
Cloud Run service agent has the
Cloud Run Service Agent role (roles/run.serviceAgent)
that contains the necessary permissions.
Custom permissions: For more granular control, grant the Cloud Run service agent with the following additional permissions on the project:
compute.networks.getcompute.subnetworks.getcompute.subnetworks.use on the project or the specific subnetcompute.addresses.getcompute.addresses.listcompute.addresses.create (required only for dual-stack subnets with external IPv6)compute.addresses.delete (required only for dual-stack subnets with external IPv6)compute.addresses.createInternalcompute.addresses.deleteInternalcompute.regionOperations.getCompute Network User role: If you don't use the default
Cloud Run Service Agent role or the custom permissions, grant the
Compute Network User role (roles/compute.networkUser)
on the Cloud Run Service Agent service account. Subnets with
external IPv6 also require the Compute Public IP Admin role (roles/compute.publicIpAdmin).
For example, to grant the Compute Network User role, run the following command:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
Replace the following:
Depending on the Cloud Run resource that you have, see the instructions in one of the following sections:
Direct VPC egress allows your Cloud Run service to send traffic to a VPC network without a Serverless VPC Access connector. Network costs scale to zero just like the service itself. You can also add network tags directly on Cloud Run service revisions for more granular network security, such as applying VPC firewall rules.
You can configure Direct VPC egress with a service by using the Google Cloud console, Google Cloud CLI, YAML, or Terraform.
Click Create Service if you are configuring a new service you are deploying to. If you are configuring and deploying an existing service, click the service, then click Edit and deploy new revision.
If you are configuring a new service, fill out the initial service settings page as needed, then click Containers, Networking, Security to expand the service configuration page.
Click the Networking tab.
Click Connect to a VPC for outbound traffic.
Click Send traffic directly to a VPC.
In the Network field, select the VPC network that you want to send traffic to.
In the Subnet field, select the subnet where your service receives IP addresses from. You can deploy multiple services on the same subnet.
Optional: Enter the names of the network tags
that you want to associate with your service or services. Network tags are
specified at the revision-level. Each service revision can have different
network tags, such as network-tag-2.
For Traffic routing, select one of the following:
Click Create or Deploy.
To verify that your service is on your VPC network, click the service, then click the Networking tab. The network and subnet are listed in the VPC card.
You can now send requests from your Cloud Run service to any resource on the VPC network, as allowed by your firewall rules.
To deploy a Cloud Run service without a connector from the Google Cloud CLI:
Update gcloud components to the latest version:
gcloud components update
Ensure that the Compute Engine API is enabled for your project:
gcloud services enable compute.googleapis.com
Deploy your Cloud Run service with the following command:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
Replace:
us-docker.pkg.dev/cloudrun/container/hello:latest. If you use Artifact Registry,
the repository REPO_NAME must
already be created. The URL follows the format of LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
network-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.To verify that your service is on your VPC network, run the following command:
gcloud run services describe SERVICE_NAME \ --region=REGION
Replace:
SERVICE_NAME with the name of your service.REGION with the region for your service that you
specified in the previous step.The output should contain the name of your network, subnet, and egress setting, for example:
VPC access:
Network: default
Subnet: subnet
Egress: private-ranges-only
You can now send requests from your Cloud Run service to any resource on the VPC network, as allowed by your firewall rules.
If you are creating a new service, skip this step. If you are updating an existing service, download its YAML configuration:
gcloud run services describe SERVICE --format export > service.yaml
Update the following attributes:
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
Replace:
network-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.You can also specify more configuration, such as environment variables or memory limits.
Create or update the service using the following command:
gcloud run services replace service.yaml
To learn how to apply or remove a Terraform configuration, see Basic Terraform commands.
Add the following to your main.tf file:
Optionally, make your service public if you want to allow unauthenticated access to the service.
Direct VPC egress allows your Cloud Run job to send traffic to a VPC network without a Serverless VPC Access connector. You can also add network tags directly on Cloud Run jobs for more granular network security, such as applying VPC firewall rules.
You can configure Direct VPC egress with a job by using the Google Cloud console, Google Cloud CLI, or YAML.
If you are configuring a new job, click the Jobs tab and fill out the initial job settings page as needed. If you are configuring an existing job, click the job, then click Edit.
Click Container, Variables & Secrets, Connections, Security to expand the job properties page.
Click the Connections tab.
Click Connect to a VPC for outbound traffic.
Click Send traffic directly to a VPC.
In the Network field, select the VPC network that you want to send traffic to.
In the Subnet field, select the subnet where your job receives IP addresses from. You can execute multiple jobs on the same subnet.
For Traffic routing, select one of the following:
Optional: Enter the names of the network tags
that you want to associate with your service or services. Network tags are
specified at the revision-level. Each service revision can have different
network tags, such as network-tag-2.
Optional: Enter the names of the network tags
that you want to associate with your job or jobs. For jobs, network tags are
specified at the execution level. Each job execution can have different
network tags, such as network-tag-2.
Click Create or Update.
To verify that your job is on your VPC network, click the job, then click the Configuration tab. The network and subnet are listed in the VPC card.
You can now execute your Cloud Run job and send requests from the job to any resource on the VPC network, as allowed by your firewall rules.
To create a Cloud Run job without a connector from the Google Cloud CLI:
Update gcloud components to the latest version:
gcloud components update
Ensure that the Compute Engine API is enabled for your project:
gcloud services enable compute.googleapis.com
Create a Cloud Run job with the following command:
gcloud run jobs create JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
Replace:
us-docker.pkg.dev/cloudrun/container/job:latestnetwork-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.To verify that the job is on your VPC network, run the following command:
gcloud run jobs describe JOB_NAME \ --region=REGION
Replace:
JOB_NAME with the name of your job.REGION with the region for your job that you
specified in the previous step.The output should contain the name of your network and subnet, for example:
VPC network:
Network: default
Subnet: default
You can now execute your Cloud Run job and send requests from the job to any resource on the VPC network, as allowed by your firewall rules.
If you are creating a new job, skip this step. If you are updating an existing job, download its YAML configuration:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Update the following attributes:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_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
Replace:
network-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.Create or update the job using the following command:
gcloud run jobs replace job.yaml
Direct VPC allows your Cloud Run worker pool to send or receive traffic to or from a VPC, each worker pool instance receives a private IP address on the configured network and subnet.
Contrary to services or jobs, Direct VPC connectivity for worker pools allows egress and ingress. This means that worker pool instances can reach resources on the VPC network, and resources on the VPC network can also reach a worker pool instance using its IP address. See how an instance can retrieve its private IP addresses using the metadata server.
You can also add network tags directly on Cloud Run worker pool revisions with Direct VPC egress for more granular network security, such as applying VPC firewall rules.
You can configure Direct VPC egress by using the Google Cloud console, the Google Cloud CLI, or YAML.
Select Worker pools from the menu, and click Deploy container to configure a new worker pool. If you are configuring an existing worker pool, click the worker pool, then click Edit and deploy new revision.
If you are configuring a new worker pool, fill out the initial worker pool page, then click Container(s), Volumes, Networking, Security to expand the worker pools configuration page.
Click the Networking tab.
Select Connect to a VPC.
Click Create or Deploy.
You can now send requests from your Cloud Run worker pool to any resource on the VPC network, as allowed by your firewall rules.
To deploy a Cloud Run worker pool without a connector from the Google Cloud CLI:
Update gcloud components to the latest version:
gcloud components update
Ensure that the Compute Engine API is enabled for your project:
gcloud services enable compute.googleapis.com
Deploy your Cloud Run worker pool with the following command:
gcloud run worker-pools deploy WORKER_POOL \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
Replace:
us-docker.pkg.dev/cloudrun/container/worker-pool:latestnetwork-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.To verify that your worker pool is on your VPC network, run the following command:
gcloud run worker-pools describe WORKER_POOL \ --region=REGION
Replace:
WORKER_POOL with the name of your worker pool.REGION with the region for your worker pool that you
specified in the previous step.The output should contain the name of your network, subnet, and egress setting, for example:
VPC access:
Network: default
Subnet: subnet
Egress: private-ranges-only
You can now send requests from your Cloud Run worker pool to any resource on the VPC network, as allowed by your firewall rules.
If you are creating a new worker pool, skip this step. If you are updating an existing worker pool, download its YAML configuration:
gcloud run worker-pools describe WORKER_POOL --format export > workerpool.yaml
Update the following attributes:
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL 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_URL
Replace the following:
network-tag-2.all-traffic: Sends all outbound traffic through the VPC
network.private-ranges-only: Sends only traffic to internal addresses
through the VPC network.us-docker.pkg.dev/cloudrun/container/worker-pool:latest.You can also specify more configuration, such as environment variables or memory limits.
Create or update the worker pool using the following command:
gcloud run worker-pools replace workerpool.yaml
Administrators can restrict the egress settings that developers can select
by setting the
run.allowedVPCEgress
organization policy.
You can access private IP addresses between instances in your VPC network for secure internal communication. To retrieve a worker pool instance's private IP address from the metadata server, run the following commands inside your container:
To get the IPv4 address, send a request to the metadata server at the /computeMetadata/v1/instance/network-interfaces/0/ip endpoint:
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip" -H "Metadata-Flavor: Google"
To get the IPv6 address, create your instance with a dual-stack
subnet, and send a request to the metadata server at the /computeMetadata/v1/instance/network-interfaces/0/ipv6 endpoint:
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ipv6" -H "Metadata-Flavor: Google"
To verify that your worker pool instance is attached to a VPC network, query the following network interface metadata paths:
# Verify the existence of the network interface directory
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/" -H "Metadata-Flavor: Google"
# Verify the existence of the first network interface
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/" -H "Metadata-Flavor: Google"
The metadata server returns a 404: Not Found error in the following scenarios:
If you don't connect your worker pool instance to a VPC network. In this case, the metadata server returns an error for the following paths:
/computeMetadata/v1/instance/network-interfaces/computeMetadata/v1/instance/network-interfaces/0/computeMetadata/v1/instance/network-interfaces/0/ip/computeMetadata/v1/instance/network-interfaces/0/ipv6To add a dual-stack subnet with an IPv6 range on a Cloud Run resource, see Set up dual-stack.
Restrict access to resources in a VPC network by using VPC firewall rules. Add these restrictions by using one of the following strategies:
Create an egress firewall rule that refers to your service or job.
In the egress firewall rule, refer to your service or job by using the linked service account service identity, the subnet's IP range, or the associated network tags.
Add an additional layer of network security by using network tags in egress firewall rules.
To associate network tags with a service or job:
In the Google Cloud console, go to the Cloud Run page.
Click the service or job you want to associate network tags with, then click Edit and deploy new revision for services or Edit for jobs.
Click the Networking tab for services, or the Connections tab for jobs.
Ensure that you have selected Connect to a VPC for outbound traffic and Send traffic directly to a VPC.
In the Subnet field, select the subnet where your service receives IP addresses from. You can deploy or execute multiple services or jobs on the same subnet.
In the Network tags field, enter the names of the network tags that you want to associate with your service or job.
Click Deploy or Update.
For services, every service revision can have a different set of network tags because network tags are specified at the revision level. For jobs, a job execution has the same network tags that the job had when the execution of the job was created.
To associate network tags
with a service or job, use the gcloud run deploy command:
gcloud run deploy SERVICE_JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --region=REGION
Replace the following:
For services, every service revision can have a different set of network tags because network tags are specified at the revision level. For jobs, a job execution has the same network tags that the job had when the execution of the job was created.
Depending on the Cloud Run resource that you have, see the instructions in one of the following sections:
To remove your service from the VPC network:
Click the service you want to remove, then click Edit and deploy new revision.
Click the Networking tab.
Clear Connect to a VPC for outbound traffic.
Click Deploy.
To verify that your service is no longer on your VPC network, click the Networking tab. The network and subnet are no longer listed in the VPC card.
To remove only the network tags while keeping the service connected to the VPC network:
Click the service that contains the network tags you want to remove, then click Edit and deploy new revision.
Click the Networking tab.
Clear the names of the network tags that you no longer want to associate with your service.
Click Deploy.
To remove your service from the VPC network, run the following command:
gcloud run services update SERVICE_NAME --region=REGION \ --clear-network
To remove only the network tags while keeping the service connected to the VPC network, run the following command:
gcloud run services update SERVICE_NAME --region=REGION \ --clear-network-tags
Replace the following:
To remove your service from the VPC network:
Download the service's YAML configuration:
gcloud run services describe SERVICE_NAME --format export > service.yaml
Remove the following content from your service.yaml file:
run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
Where
Deploy the service revision by running the following command:
gcloud run services replace service.yamlTo remove only the network tags while keeping the service connected to the VPC network:
Download the service's YAML configuration:
gcloud run services describe SERVICE_NAME --format export > service.yaml
Remove the tags variable from the content in your service.yaml
file, leaving the network and subnetwork variables in place, as shown
in the following example:
run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
Where
Deploy the service revision by running the following command:
gcloud run services replace service.yamlTo remove your job from the VPC network:
Click the job you want to remove, then click Edit and deploy new revision.
Click the Connections tab.
Clear Connect to a VPC for outbound traffic.
Click Update.
To verify that your job is no longer on your VPC network, click the Configuration tab. The network and subnet are no longer listed in the VPC card.
To remove only the network tags while keeping the job connected to the VPC network:
Click the job that contains the network tags you want to remove, then click Edit and deploy new revision.
Click the Connections tab.
Clear the names of the network tags that you no longer want to associate with your job.
Click Update.
To remove your job from the VPC network, run the following command:
gcloud run jobs update JOB_NAME --region=REGION \ --clear-network
To remove only the network tags while keeping the job connected to the VPC network, run the following command:
gcloud run jobs update JOB_NAME --region=REGION \ --clear-network-tags
Replace the following:
To remove your job from the VPC network:
Download the job's YAML configuration:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Remove the following content from your job.yaml file:
run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
Replace the following:
Update the job by running the following command:
gcloud run jobs replace job.yamlTo remove only the network tags while keeping the job connected to the VPC network:
Download the job's YAML configuration:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Remove the tags variable from the content in your job.yaml
file, leaving the network and subnetwork variables in place, as shown
in the following example:
run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
Replace the following:
Update the job by running the following command:
gcloud run jobs replace job.yamlTo remove your worker pool from the VPC network, run the following command:
gcloud run worker-pools update WORKER_POOL --region=REGION \ --clear-network
To remove only the network tags while keeping the worker pool connected to the VPC network, run the following command:
gcloud run worker-pools update WORKER_POOL --region=REGION \ --clear-network-tags
Replace the following:
To delete a subnet, you must first delete or redeploy all resources that use it. If Cloud Run is using a subnet, disconnect the Cloud Run service or job from the VPC network or move it to a different subnet before deleting the subnet.
The following error occurs when you try to deploy:
Instance failed to start because of insufficient free IP addresses in the subnetwork SUBNET_ID when attempting to create an address in the subnetwork. Please consider moving to a subnetwork with more available IP addresses.
If the subnet of the VPC network runs out of IPv4 addresses, it is logged by Cloud Logging. When this occurs, Cloud Run cannot start any more service instances or job tasks until more IPv4 addresses become available.
To resolve this issue, follow the IP address exhaustion strategies.
To see which IP addresses Cloud Run has allocated, go to the IP addresses page in the Google Cloud console or run the following command from the Google Cloud CLI:
gcloud compute addresses list
If you experience issues with a custom MTU, ensure that you use the default MTU setting for Cloud Run.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-06-09 UTC.