如何通过Kubernetes连接到云SQL



这让我疯了,我已经尝试了3天了:我正在尝试将kubernetes部署连接到GCP中的Cloud SQL数据库。

以下是我迄今为止所做的:

  1. 设置云SQL代理以在我的部署中作为sidecar工作
  2. 创建了一个GKE服务帐户并将其附加到我的部署中
  3. 将GKE服务帐户绑定到我的GCP服务帐户
  4. 编辑到服务帐户(据我所知(是所有者权限

然而,我在GKE中运行部署时仍然得到:

the default Compute Engine service account is not configured with sufficient permissions to access the Cloud SQL API from this VM. Please create a new VM with Cloud SQL access (scope) enabled under "Identity and API access". Alternatively, create a new "service account key" and specify it using the -credential_file parameter

我该怎么解决这个问题?我找不到任何关于如何设置服务帐户以拥有云SQL的正确权限或如何调试此问题的文档。我能找到的每一个教程都以";绑定您的服务帐户";然后停止。没有任何内容描述需要什么权限,也没有任何关于如何从我的代码实际连接到DB的内容(我的代码将如何与代理通信?(。

请帮助

终于开始工作了!

关于这一点的主要文章(cloud.google.com/sql/docs/mysql/connect-kubernetes engine(掩盖了两个主要部分:

  1. 正确设置工作负载标识,我发现这些链接非常有用:a(https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identityb(https://www.youtube.com/watch?v=l-nws1e4B8M

  2. 要连接到数据库,你必须让你的代码使用数据库主机127.0.0.1

对于任何正在寻找摘要的人:

您可以在此处找到快速启动:https://cloud.google.com/sql/docs/postgres/connect-instance-kubernetes

详细的文档请点击此处:https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine


基本上,如果你选择Cloud SQL Auth proxy+Workload Identity,当它出错时,你需要检查一些事情:

在GKE方面:代码示例

  1. 确保启用了Workload Identity(clusternode pool(

  2. 检查是否为应用程序创建了Kubernetes Service Account

  3. 代表您的应用程序创建您自己的IAM Service Account

gcloud iam服务帐户创建GSA_NAME--项目=GSA_project

  1. 确保您的IAM service account具有您需要的角色,这里是Cloud SQL Client IAM角色

gcloud项目添加iam策略绑定PROJECT_ID
--member"serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com">
--角色"roles/cloudsql.client";

  1. 通过以下方式将Kubernetes Service Account绑定到IAM service account(换句话说:允许Kubernetes Service Account模拟IAM Service Account(:
  • 启用Kubernetes Service AccountIAM service account之间的IAM绑定
  • Kubernetes Service Account添加注释,以便Workload Identity知道要使用哪个IAM Service Account
  1. 请确保在deployment.yaml中为应用程序指定Kubernetes Service Account。在此处的spec.template.spec.serviceAccountName下。通过设置此项,您的部署代表模拟IAM Service AccountKubernetes Service Account,因此此配置中的sidecarCloud SQL Auth proxy具有Cloud SQL Client IAM角色(来自IAM Service Account(以建立到Cloud SQL的连接

  2. 请检查Cloud SQL Auth proxy是否也在您的应用程序部署中。替换<INSTANCE_CONNECTION_NAME>由您的云SQL实例连接名称<DB_PORT>转换为类似于:5432的数字。这个将在你的pod中运行一个sidecar和你的应用程序,这个sidecar将在localhost:5432上打开一个Cloud SQL Auth Proxy(5432是您在上面指定的DB_PORT,Cloud SQL Auth Proxy通过上面的Cloud SQL Client IAM角色向Cloud SQL进行身份验证(。因此,在应用程序中,数据库URL的配置属性应该是:jdbc:postgresql://localhost:5432

在应用程序端:

  • 确保您的数据属性配置正确

url:jdbc:postgresql://localhost:5432

用户名:您的用户名

密码:您的密码

数据库:您的数据库

相关内容

  • 没有找到相关文章

最新更新