You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置Ingress Control后Cloud Run客户端服务无法连接后端服务排查

排查Cloud Run VPC-only Ingress导致的前后端连接问题

核心问题先搞清楚

你把后端Cloud Run设成仅允许VPC流量后,它就彻底拒绝公网请求了。但你的静态页Cloud Run是公网可访问的,它发的请求属于公网来源,直接被后端的Ingress规则挡了,返回403。这也是为啥之前没开Ingress时CORS正常——那时请求能到FastAPI,CORS配置能生效,现在请求连后端服务的门都没进,浏览器自然报CORS错误。

一步步排查解决

1. 给前端Cloud Run接入VPC

静态页Cloud Run默认不在VPC里,要让它能访问VPC-only的后端,必须配置Serverless VPC Access Connector,把它拽进和后端同一个VPC网络:

  • 进前端Cloud Run服务的设置页,找到“VPC连接”,添加已有的VPC连接器(如果没有就新建一个,选和后端一致的VPC及子网)。
  • 配置完后,前端的请求会走VPC连接器发往后端,符合后端的Ingress规则。

2. 给前端服务账号加权限

就算在同一个VPC,前端Cloud Run的服务账号也得有调用后端的权限:

  • 找到前端Cloud Run的默认服务账号(格式是[你的项目编号]-compute@developer.gserviceaccount.com)。
  • 在IAM里给这个账号添上Cloud Run Invoker角色,作用对象选你的后端Cloud Run服务。

3. 搞定AlloyDB的SSL错误(operationalError: SSL SysCall error: eof detected)

这个错误和VPC连接、数据库SSL配置或权限有关:

  • 确认后端Cloud Run的VPC连接器开了私有访问,能通AlloyDB的私有IP(AlloyDB只有私有IP)。
  • 检查数据库连接代码:AlloyDB强制要求SSL,确保你用了正确的根证书(Google提供的server-ca.pem),或者驱动里设置了sslmode=require(比如psycopg2)。
  • 给后端Cloud Run的服务账号添roles/alloydb.client角色,不然连不上AlloyDB。

4. 回头验证CORS配置

等前面的网络问题解决后,再确认FastAPI的CORS:

  • 确保允许的origin里包含前端Cloud Run的域名(比如https://[前端服务名]-[哈希].a.run.app),调试阶段可以暂时设allow_origins=["*"]测一下。
  • 如果前端用后端的内部域名访问(比如http://[后端服务名].[区域].run.app),别忘了把这个内部域名也加进允许列表。

快速验证方法

  1. 给前端加上VPC连接器后,进前端Cloud Run的shell,执行curl https://[后端服务URL],看能不能拿到正常响应。
  2. 看后端Cloud Run的日志,确认请求是不是真的到了服务里(而不是被Ingress拦了)。

内容的提问来源于stack exchange,提问作者funtkungus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:23:28