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

Google Cloud SQL 间歇性IAM认证失败引发服务超时问题

问题根因与处置方案

问题现象

  • 单实例常驻运行的App Engine Flex Java REST后端服务,通过服务账号IAM认证方式连接Cloud SQL Postgres实例,绝大多数时段运行正常,偶发REST调用超时,触发服务端及客户端拒绝服务。
  • 近7天GCP日志累计出现7365次JDBC连接获取失败错误,发生频次极高:
org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
  • 服务与数据库均无明显资源瓶颈:App Engine实例配置为1vCPU、4GB内存,CPU峰值80%但与超时时段不重合,内存占用始终低于1.5GB;Cloud SQL实例配置为1vCPU、3.75GB内存,CPU使用率稳定在5%左右,内存占用约2GB,每秒事务数不超过6。
  • Cloud SQL实例本身运行正常,报错指向IAM服务账号凭证校验失败,数据库侧日志如下:
2022-06-16 08:33:33.316 UTC [610407]: [1-1] db=db-dev,user=connect-xxx@appspot FATAL:  Cloud SQL IAM service account authentication failed for user "connect-xxx@appspot"
2022-06-16 08:33:33.316 UTC [610407]: [1-1] db=db-dev,user=connect-xxx@appspot DETAIL:  Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential.
Connection matched pg_hba.conf line 21: "local   all           +cloudsqliamserviceaccount         cloudsql-iam-svc-acct"

已排除的排查方向

  • 排除Cloud SQL实例可用性问题:实例无重启、故障切换记录,资源水位始终处于健康区间。
  • 排除Cloud SQL Auth Proxy运行异常:Proxy启动流程正常,端口监听规则生效,运行期间无错误日志输出。
    Proxy启动日志与端口监听状态如下:
# Proxy启动日志
2022/06/21 15:44:23 current FDs rlimit set to 1048576, wanted limit is 8500. Nothing to do here.
2022/06/21 15:44:24 Listening on 0.0.0.0:3306 for connect-xxx:europe-west9:dev
2022/06/21 15:44:24 Ready for new connections
2022/06/21 15:44:24 Generated RSA key in 731.70246ms

# 端口监听状态
systemd-r    246 systemd-resolve   14u  IPv4  13413      0t0  TCP 127.0.0.53:53 (LISTEN)
container    345            root   11u  IPv4  14603      0t0  TCP 127.0.0.1:45795 (LISTEN)
sshd         422            root    3u  IPv4  14545      0t0  TCP *:22 (LISTEN)
sshd         422            root    4u  IPv6  14546      0t0  TCP *:22 (LISTEN)
dockerd      447            root   27u  IPv4  17276      0t0  TCP 172.17.0.1:3306 (LISTEN)
  • 排除连接配置错误:
    1. HikariCP连接池配置正确,IAM认证开关已开启:
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="poolName" value="springHikariCP" />
        <property name="connectionTestQuery" value="SELECT 1" />
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="connectionTimeout" value="600000"/>
        <property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1:3306/db-dev?cloudSqlInstance=connect-xxx:europe-west9:dev&socketFactory=com.google.cloud.sql.postgres.SocketFactory" />
        <property name="username" value="connect-xxx@appspot"/>
        <!-- IAM auth -->
        <property name="password" value="dummy"/>
        <property name="dataSourceProperties">
            <props>
                <prop key="sslmode">disable</prop>
                <prop key="enableIamAuth">true</prop>
            </props>
        </property>
    </bean>
  1. app.yaml中Cloud SQL实例连接规则配置正确,端口映射与JDBC连接串一致:
beta_settings:
  cloud_sql_instances: connect-xxx:europe-west9:dev=tcp:3306
  1. Postgres Socket Factory依赖版本为1.6.0,符合官方使用规范:
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
    <version>1.6.0</version>
</dependency>

最终根因

经Google官方确认,该问题属于GCP平台侧IAM认证模块偶发的令牌校验故障,不属于用户侧代码、配置或资源问题,官方将在问题确认后数周内推出全平台修复版本。

官方修复上线前的临时缓解方案

  • 调整HikariCP连接参数:将connectionTimeout从当前的600000ms(10分钟)下调至30000ms以内,避免连接获取失败时长时间阻塞业务线程,放大故障影响;将maxLifetime设置为30分钟以内,强制连接池定期重建连接,减少绑定无效令牌的长连接占比。
  • 在JDBC操作层增加轻量重试逻辑,捕获JDBCConnectionException时自动重试1-2次,屏蔽偶发认证失败对上层业务的影响。
  • 若故障影响严重,可临时切换为Postgres内置用户密码认证模式,待官方修复上线后再切回IAM服务账号认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:51:26