# 错误：Cloud Run 服务无法连接到外部 API：dial tcp：查找 api.example.com 在 169.254.169.254:53：读取 udp 10.0.0.1:53：i/o 超时

- **ID:** `cloud/gcp-cloud-run-service-egress-ip`
- **领域:** cloud
- **类别:** network_error
- **错误码:** `DNSTimeout`
- **验证级别:** ai_generated
- **修复率:** 87%

## 根因

Cloud Run 服务配置了 VPC 出站流量设置为“通过 VPC 路由所有流量”，但 VPC 没有 NAT 网关或 Cloud NAT，因此到互联网的出站流量被阻止。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Cloud Run (fully managed): gen2 | active | — | — |
| VPC: auto-mode | active | — | — |
| Cloud NAT: not configured | active | — | — |

## 解决方案

1. ```
   在 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
   ```
2. ```
   如果 Cloud Run 服务只需要访问内部资源，将其 VPC 出站设置更改为“仅通过 VPC 路由到私有 IP 的请求”（--vpc-egress=private-ranges-only）。
   ```
3. ```
   使用 Serverless VPC Access 连接器配合 NAT 网关，而不是直接 VPC 出站。
   ```

## 无效尝试

- **** — 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. (90% 失败率)
- **** — Disabling VPC egress may break connectivity to internal resources (e.g., Cloud SQL) that the service depends on, causing other errors. (70% 失败率)
- **** — The timeout is a symptom of network unreachability, not a processing delay; longer timeout won't fix the missing NAT gateway. (95% 失败率)
