Error: Cloud Run service cannot connect to external API: dial tcp: lookup api.example.com on 169.254.169.254:53: read udp 10.0.0.1:53: i/o timeout
ID: cloud/gcp-cloud-run-service-egress-ip
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| Cloud Run (fully managed): gen2 | active | — | — | — |
| VPC: auto-mode | active | — | — | — |
| Cloud NAT: not configured | active | — | — | — |
Root Cause
The Cloud Run service is configured with VPC egress set to 'route all traffic through the VPC' but the VPC has no NAT gateway or Cloud NAT, so outbound traffic to the internet is blocked.
generic中文
Cloud Run 服务配置了 VPC 出站流量设置为“通过 VPC 路由所有流量”,但 VPC 没有 NAT 网关或 Cloud NAT,因此到互联网的出站流量被阻止。
Official Documentation
https://cloud.google.com/run/docs/configuring/vpc-direct-vpcWorkarounds
-
95% success Create a Cloud NAT router in the VPC: gcloud compute routers create nat-router --network=default --region=us-central1 && gcloud compute routers nats create nat-config --router=nat-router --region=us-central1 --nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips
Create a Cloud NAT router in the VPC: gcloud compute routers create nat-router --network=default --region=us-central1 && gcloud compute routers nats create nat-config --router=nat-router --region=us-central1 --nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips
-
85% success Change the Cloud Run service's VPC egress setting to 'route only requests to private IPs through the VPC' (--vpc-egress=private-ranges-only) if it only needs access to internal resources.
Change the Cloud Run service's VPC egress setting to 'route only requests to private IPs through the VPC' (--vpc-egress=private-ranges-only) if it only needs access to internal resources.
-
90% success Use Serverless VPC Access connector with a NAT gateway instead of direct VPC egress.
Use Serverless VPC Access connector with a NAT gateway instead of direct VPC egress.
中文步骤
在 VPC 中创建 Cloud NAT 路由器:gcloud compute routers create nat-router --network=default --region=us-central1 && gcloud compute routers nats create nat-config --router=nat-router --region=us-central1 --nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips
如果 Cloud Run 服务只需要访问内部资源,将其 VPC 出站设置更改为“仅通过 VPC 路由到私有 IP 的请求”(--vpc-egress=private-ranges-only)。
使用 Serverless VPC Access 连接器配合 NAT 网关,而不是直接 VPC 出站。
Dead Ends
Common approaches that don't work:
-
90% fail
The DNS timeout is due to network routing, not DNS server configuration; the VPC egress blocks all outbound traffic, including DNS queries to external servers.
-
70% fail
Disabling VPC egress may break connectivity to internal resources (e.g., Cloud SQL) that the service depends on, causing other errors.
-
95% fail
The timeout is a symptom of network unreachability, not a processing delay; longer timeout won't fix the missing NAT gateway.