Spring GCP 服务未连接到 Cloud SQL 数据库

Posted

技术标签:

【中文标题】Spring GCP 服务未连接到 Cloud SQL 数据库【英文标题】:Spring GCP service not connecting to Cloud SQL database 【发布时间】:2019-03-10 21:47:04 【问题描述】:

我有一个 Spring GCP 服务,它在本地运行时可以很好地连接到我的 Google Cloud SQL 实例。

但是,当我在我的 Google Cloud Kubernetes 集群上部署和启动时,它无法连接并出现 Insufficient Permissions 错误。

我按照https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine 的步骤操作,但仍然是同样的连接问题。

我的源代码是https://github.com/christianblake/spring-boot-gcp

deployment.yml 在根目录中。

如果有人有任何指点,我会很感激,因为我显然错过了一点。

谢谢。

【问题讨论】:

当您谈到权限不足时,您是什么意思?你能发布错误堆栈跟踪吗?另外,检查您的服务帐户是否具有适当的权限 【参考方案1】:

@Mangu,我在错误日志中发现了以下错误。

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden

这导致了以下类似的问题 Cloud SQL Proxy and Insufficient Permission

我重新创建了集群,包括具有以下内容的 sql 范围。

gcloud container clusters create cloudcluster --num-nodes 2  --machine-type n1-standard-1 --zone us-central1-c --scopes https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.admin

这解决了问题。

感谢你们的反馈,并为错过原始问题中的谷歌错误代码而道歉。

【讨论】:

【参考方案2】:

假设credentials.json 安装正确,credentials.json 中定义的服务帐户需要具有Cloud SQL Client 角色。正如here 所记录的那样,有几种方法可以做到这一点。

在 cli 中,您可以执行以下操作:

gcloud projects add-iam-policy-binding $PROJECT_NAME \
--member serviceAccount:$GOOGLE_SERIVICE_ACCOUNT.iam.gserviceaccount.com --role roles/cloudsql.client

【讨论】:

以上是关于Spring GCP 服务未连接到 Cloud SQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 spring gcp PubSubTemplate 连接到本地实例?

App Engine Java Servlet 未连接到 Cloud SQL

强调 spring boot 服务时消耗的 GCP Postgres 连接(使用 SQL Cloud 代理)

Docker中的Spring Boot未连接到Docker中的Mongo

spring-cloud-gcp-starter-bigquery 从属性文件中忽略 spring.cloud.gcp.credentials.location

PostgreSql 本地连接到远程服务器 GCP