使用Curl向GCP订阅发送测试事件时遭遇502错误求助
问题描述
在同一环境下,使用curl向GCP的两个订阅推送测试事件时结果不同:
curl -k https://loansettlement-[servername]-ts.a.run.app -H "X-Serverless-Authorization: Bearer $(gcloud auth print-identity-token)" "This one works fine" curl -k https://loanapplication-[servername]-ts.a.run.app -H "X-Serverless-Authorization: Bearer $(gcloud auth print-identity-token)" curl: (56) CONNECT tunnel failed, response 502
已确认URL是从GCP订阅直接复制,无拼写错误,且该订阅状态显示为活跃。排除代理问题(另一订阅可正常运行),寻求解决办法。
解决办法
检查订阅目标服务的运行状态
502错误多源于目标服务返回无效响应,先确认loanapplication对应的后端服务(如Cloud Run)状态:- 登录GCP控制台,找到对应Cloud Run服务,查看实例是否处于"就绪"状态、是否有运行中的实例
- 查看服务日志,排查是否存在启动失败、资源不足或代码报错的记录
- 直接访问该Cloud Run服务的基础URL(不带订阅相关路径),测试能否正常响应
验证订阅的权限配置
即使URL正确,订阅的权限配置可能存在问题:- 检查订阅使用的推送服务账号,是否拥有调用目标Cloud Run服务的
roles/run.invoker角色 - 生成指定受众的身份令牌测试:执行
gcloud auth print-identity-token --audiences=https://loanapplication-[servername]-ts.a.run.app,用生成的令牌替换原命令中的令牌再尝试请求
- 检查订阅使用的推送服务账号,是否拥有调用目标Cloud Run服务的
排查网络与防火墙规则
同一环境下目标服务的网络配置可能存在差异:- 确认目标Cloud Run服务是否设置了私有VPC,且订阅所在网络具备访问权限
- 检查GCP项目的防火墙规则,是否存在阻止该服务流量的配置
- 在GCP内部环境(如Cloud Shell)中测试curl请求,排除本地网络的特殊限制
重新创建订阅
若以上排查均无问题,可能订阅本身存在配置异常:- 删除当前的
loanapplication订阅,按原配置重新创建 - 新订阅创建完成后立即测试curl请求,验证是否恢复正常
- 删除当前的
内容的提问来源于stack exchange,提问作者Lance Shi
相关产品推荐
相关产品推荐

