GCP API网关对接多个Cloud Run后端返回404错误配置问题咨询
问题排查与修复方案
1. 路径请求返回404的原因与修复
核心原因是GCP API网关默认的路径转发规则导致后端匹配不到接口:
- 你在操作级定义的
x-google-backend默认会将请求的完整路径直接拼接在后端服务地址后转发。比如你请求网关的/dql/deleteFolder路径,会直接转发到https://backend-dql-flask-uc.a.run.app/dql/deleteFolder,如果你的后端Flask服务实际暴露的接口路径是/deleteFolder(无/dql前缀),后端就会返回404错误。 - 另外请确认修改配置后已经重新部署API网关,且部署过程无报错,新配置已生效。
修复方案二选一即可:
- 方案1:调整后端接口路径,匹配网关定义的路径前缀,比如第二个服务的接口统一添加/dql前缀。
- 方案2:在
x-google-backend配置中添加路径重写规则,修改对应路径的转发逻辑,示例配置如下:
# /dql/deleteFolder 路径下的x-google-backend配置调整为 x-google-backend: address: https://backend-dql-flask-uc.a.run.app path_rewrite: '/deleteFolder'
如果有多个/dql开头的路径,可以用正则匹配批量重写,规则为path_rewrite: '/dql/(.*)' : '/\1'。
2. 直接访问Cloud Run原生URL无需认证的原因与修复
- 该问题和API网关配置无关,是Cloud Run本身的IAM权限配置导致:如果Cloud Run服务的权限配置中允许
allUsers拥有roles/run.invoker(调用者)权限,就会支持未认证直接访问。你配置的JWT认证仅在网关层生效,不会覆盖Cloud Run本身的访问控制规则。
修复步骤:
- 进入每个Cloud Run服务的权限管理页面,删除
allUsers对应的roles/run.invoker权限。 - 单独为你的API网关服务账号授予
roles/run.invoker权限,确保只有网关可以调用后端Cloud Run服务。
内容的提问来源于stack exchange,提问作者Jon Flynn
相关产品推荐
相关产品推荐

