升级cloudsql-proxy至v1.31.0后报instanceDoesNotExist错误
问题原因
该报错和你使用M1设备、拉取ARM架构适配的v1.31.0版本镜像无直接关联,v1.31.0版本的Cloud SQL Proxy收紧了启动参数校验规则、调整了Cloud SQL API的调用逻辑,旧版本可兼容的不规范配置在该版本下会直接触发instanceDoesNotExist 404错误,常见触发场景如下:
- 实例连接名不完整:旧版本对
-instances参数容忍度较高,支持模糊匹配简写的实例信息,v1.31强制要求所有实例必须填写项目ID:实例所在区域:实例名的三段式完整连接名,任意字段缺失、拼写错误都会直接返回实例不存在。 - 多实例分隔符使用错误:旧版本支持空格分隔多个实例连接名,v1.31仅识别英文逗号作为多实例分隔符。如果参数里用空格分隔多实例,代理会把空格后的内容识别为其他启动参数,实际传入的实例名是截断后的无效字符串,触发404。
- 服务账号权限/归属错误:
-credential_file指定的服务账号如果不属于实例所在项目,或者未被授予Cloud SQL Client角色,API不会返回权限不足错误,会直接返回实例不存在响应。 - 私有IP场景参数缺失:如果目标Cloud SQL实例仅开启私有IP、未分配公网IP,v1.31默认走公网探测实例,未指定私有IP连接参数时会探测失败,抛出实例不存在错误。
排查解决步骤
- 修正
-instances参数格式
直接从Cloud SQL控制台实例详情页复制官方给出的完整实例连接名,不要手动拼写。多实例场景下,所有实例连接名之间仅用英文逗号分隔,不要加多余空格,正确配置示例:- command: - /cloud_sql_proxy - --dir=/cloudsql - -instances=proj-123:asia-southeast1:db-main,proj-123:asia-southeast1:db-log - -credential_file=/credentials/sa-key.json - 校验凭证有效性
进入运行中的代理Pod,执行以下命令验证凭证是否有权限访问目标实例:
如果返回的实例列表中找不到目标实例,先确认挂载的凭证文件是否正确,再给对应服务账号绑定目标项目的kubectl exec -it <db-proxy的pod名称> -- sh # 激活挂载的服务账号 gcloud auth activate-service-account --key-file=<配置里的credential_file路径> # 拉取目标项目下的Cloud SQL实例列表 gcloud sql instances list --project=<目标实例所属项目ID>Cloud SQL Client角色即可。 - 补全私有IP连接参数
如果目标实例仅开放私有IP,在启动参数中新增以下配置,同时确认集群VPC和Cloud SQL实例的私有网络连通:- -ip_address_types=PRIVATE - 开启debug日志定位解析问题
如果以上步骤都没解决,在启动参数中加-log_debug_stdout=true,重启Pod后查看日志中打印的实际请求的实例名称,确认是否存在参数解析截断、特殊字符转义导致的实例名错误。
内容的提问来源于stack exchange,提问作者Omar Ahmed
相关产品推荐
相关产品推荐

