配置Direct VPC出口后Cloud Run服务仍无法互连的问题排查
Cloud Run服务间PSC通信的CORS问题排查
环境配置概述
- Server端Cloud Run服务:仅允许内部流量,通过Privacy Service Connect(PSC)在Consumer VPC暴露
10.0.0.2端点,关联Producer VPC内指向Server的内部负载均衡(ILB) - Client端Cloud Run服务:公网Web应用,允许所有入站流量,已启用Consumer VPC的Direct VPC出口
- 私有DNS配置:创建A记录将Server的
run.app域名映射到PSC的Consumer IP10.0.0.2
问题现象
Client通过run.app域名请求Server时触发CORS错误:
Access to XMLHttpRequest at 'https://test-development-enterprise-api-ummzxs4jpa-ez.a.run.app/api/auth/passwordless' from origin 'https://psc-consumer-ummzxs4jpa-ez.a.run.app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
但在Consumer VPC内的测试VM上,通过SSH执行请求能成功访问Server:
ify@psc-consumer-2:~$ curl -k https://test-development-enterprise-api-ummzxs4jpa-ez.a.run.app/api/health {"message":"Healthy Services","uptime":"5:3:46"}
可能的问题分析
1. Preflight请求(OPTIONS)未被正确处理
浏览器发起跨域请求前会先发送OPTIONS预检请求,Server端可能未配置处理OPTIONS请求的规则,或返回状态码非200/204。而curl默认不发送OPTIONS预检,直接发起GET请求,因此能成功访问。
- 检查Server端代码是否处理OPTIONS方法,确保返回
200 OK或204 No Content,同时携带正确的CORS响应头(Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等)
2. PSC/ILB的流量过滤规则
虽VM能正常访问,但Cloud Run的Direct VPC出口流量可能被PSC或ILB的访问控制策略拦截OPTIONS请求:
- 检查ILB的后端服务是否允许OPTIONS方法的流量
- 确认PSC端点配置未限制HTTP方法
3. 私有DNS解析一致性问题
Client端Cloud Run的Direct VPC出口可能未正确使用私有DNS解析,存在公网DNS与私有DNS解析冲突:
- 在Client服务中添加日志,验证运行时是否将Server域名解析到
10.0.0.2 - 确认Direct VPC出口配置已启用私有DNS访问
4. Cloud Run服务网络配置细节
- 确认Client的Direct VPC出口是否正确关联Consumer VPC,无错误路由规则
- 检查Server端Cloud Run的内部流量设置,是否误拦截了来自Consumer VPC的OPTIONS请求
调整方案建议
若上述排查无效,可尝试:
- 临时放宽Server端Cloud Run的流量限制(允许公网流量),测试CORS配置是否正常,排除网络问题后再恢复PSC限制
- 改用Server的PSC端点IP(
10.0.0.2)直接请求(需注意证书问题,可能需调整Server证书的SAN字段包含该IP) - 检查Cloud Run服务的VPC连接器配置(若使用)是否正确,确保流量走VPC内部而非公网
内容的提问来源于stack exchange,提问作者remedy_man
相关产品推荐
相关产品推荐

