同VPC/项目下Cloud Run间调用503错误的配置排查求助
Cloud Run服务间内部调用503错误的配置修复方案
针对同一VPC下Cloud Run A调用Cloud Run B出现503超时错误的问题,需调整以下几类配置:
1. 配置Cloud Run A的VPC访问连接器
由于两个服务均设置了Ingress=Internal+load balancing,仅允许VPC内部流量访问。默认Cloud Run服务运行在谷歌托管的公共网络,无法直接访问用户VPC内的内部服务,必须配置VPC连接器让A的出口流量进入VPC:
- 为Cloud Run A创建并关联VPC访问连接器,确保连接器与两个服务处于同一VPC及子网
- 连接器的流量方向设置为
出口(允许Cloud Run A将流量发送到VPC内部) - 确保连接器分配的IP池有足够可用地址,避免因IP耗尽导致连接失败
2. 使用Cloud Run内部服务域名调用
放弃使用公网的https://<name>.a.run.app域名,改用VPC内部专属的服务发现域名调用Cloud Run B,格式为:
https://<service-b-name>.<your-project-id>.internal.run.app
该域名仅在VPC内部可解析,避免公网链路的延迟与访问限制,同时能直接路由到Cloud Run B的内部实例。
3. 调整Cloud Run B的实例启动与超时配置
日志显示请求耗时60-120秒,大概率是Cloud Run B的冷启动延迟或实例处理超时导致:
- 调整Cloud Run B的请求超时时间:将其设置为大于实际处理时间(比如180秒),避免实例在处理请求时提前终止
- 配置Cloud Run B的最小实例数:设置为1或以上,保留常驻实例消除冷启动延迟
- 检查B的容器镜像大小与启动脚本,优化启动速度(比如减少依赖下载、使用分层镜像)
4. 配置服务间调用权限
确保Cloud Run A的服务账号拥有调用Cloud Run B的权限:
- 为Cloud Run A的默认服务账号(
PROJECT_NUMBER-compute@developer.gserviceaccount.com)授予roles/run.invoker角色,权限范围限定为Cloud Run B服务 - 若使用自定义服务账号,需确保该账号同样拥有上述调用权限
5. 验证Ingress与网络配置一致性
- 确认两个服务的
Ingress配置均为Internal+load balancing,且关联的VPC网络一致 - 检查VPC子网的防火墙规则,允许VPC内部流量(包括VPC连接器的IP段)访问Cloud Run B的端口(默认443)
内容的提问来源于stack exchange,提问作者Matt - Block-Farms.io
相关产品推荐
相关产品推荐

