GKE Workload Identity下Spring Boot连接Cloud SQL失败疑问排查
GKE上Spring Boot通过Workload Identity连接Cloud SQL问题
背景
- 正在尝试让GKE上的Spring Boot应用连接GCP Cloud SQL,采用Google推荐的Workload Identity方案
- 已完成Workload Identity配置,为服务账号授予了Cloud Admin角色,且通过测试Pod确认Pod使用了正确的服务账号
- 部署配置如下:
apiVersion: "apps/v1" kind: "Deployment" metadata: name: "hello-world" namespace: my-dev labels: app: "hello-world" spec: replicas: 1 selector: matchLabels: app: "hello-world" template: metadata: labels: app: "hello-world" spec: containers: - name: "hello-container" image: "my-region-docker.pkg.dev/my-project/my-repo/my-tag" ports: - containerPort: 8080 serviceAccountName: new-service-account nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
问题
我的理解是完成上述配置后,无需用户名/密码即可连接数据库,因为服务账号已获授权,但Spring Boot始终无法成功连接。
尝试过多种配置组合:
- 直接使用带SocketFactory的JDBC URL:
spring.datasource.url=jdbc:postgresql:///DATABASE_NAME?cloudSqlInstance=INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory
- 使用
spring.cloud.gcp.sql.*相关属性
当前使用的配置:
spring.datasource.username=i-am-copy-pasted@gcp-sa-cloud-sql.iam spring.datasource.password=mockpassword # 实际配置就是这个值,因为要求不能留空 spring.datasource.url=jdbc:postgresql:///springdb?cloudSqlInstance=project-id:region:mydb&socketFactory=com.google.cloud.sql.postgres.SocketFactory&enableIamAuth=true
请问我的「无需用户名密码」的假设是否错误,还是配置存在问题?
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

