从 Google Kubernetes Engine 连接到 Cloud SQL for PostgreSQL

本页面介绍如何使用 Google Cloud Console 和客户端应用在连接到 PostgreSQL 实例的 Google Kubernetes Engine (GKE) 上部署示例应用。如果您及时完成本快速入门中的步骤(包括清理),那么在此期间所创建资源的费用通常不会超过 1 美元。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 启用在 GKE 上运行 Cloud SQL 示例应用所需的 Google Cloud API。

    控制台

    点击启用 API 以启用本快速入门所需的 API。

    启用 API

    这将启用以下 API:

    • Compute Engine API
    • Cloud SQL Admin API
    • Google Kubernetes Engine API
    • Artifact Registry API
    • Cloud Build API

    gcloud

    点击以下按钮打开 Cloud Shell,以通过命令行直接在浏览器中访问 Google Cloud 资源。Cloud Shell 可用于运行本快速入门中介绍的 gcloud 命令。

    打开 Cloud Shell

    按照以下方式使用 Cloud Shell 运行 gcloud services enable 命令,以启用本快速入门所需的 API。

    gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
         container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com

    此命令会启用以下 API:

    • Compute Engine API
    • Cloud SQL Admin API
    • GKE API
    • Artifact Registry API
    • Cloud Build API

设置 Cloud SQL

创建 Cloud SQL 实例

创建数据库

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 quickstart-instance
  3. 从 SQL 导航菜单中选择数据库
  4. 点击创建数据库
    1. 新建数据库对话框的数据库名称字段中,输入 quickstart-db
    2. 点击创建

gcloud

运行 gcloud sql databases create 命令以创建数据库。

gcloud sql databases create quickstart-db --instance=quickstart-instance

创建用户

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择用户
  4. 点击添加用户账号
  5. 将一个用户账号添加到实例 instance_name 页面中,添加以下信息:
    • 用户名:设为 quickstart-user
    • 密码:指定数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。
  6. 点击添加

gcloud

按照以下方式运行命令之前,请将 DB_PASS 替换为数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。

运行 gcloud sql users create 命令以创建用户。

gcloud sql users create quickstart-user \
--instance=quickstart-instance \
--password=DB_PASS

Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。

创建 GKE 集群

控制台

  1. 在 Google Cloud Console 中,转到 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击创建
  3. 点击 GKE Autopilot 的配置
  4. 对于名称,请将集群名称指定为 gke-cloud-sql-quickstart
  5. 点击创建

gcloud

运行 gcloud container clusters create-auto 命令以创建集群。

gcloud container clusters create-auto gke-cloud-sql-quickstart \
    --region us-central1

将 Cloud SQL 示例应用克隆到 Cloud Shell Editor

创建好 Cloud SQL 实例、数据库和 GKE 集群后,您现在可以克隆和配置示例应用,以连接到 Cloud SQL 实例。本快速入门中的其余步骤需要使用 gcloudkubectl 命令行工具。这两个工具都已预安装在 Cloud Shell 中。

Go

  1. 在 Cloud Shell Editor 中,打开示例应用的源代码。
    打开 Cloud Shell Editor
  2. 在“Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。

Java

  1. 在 Cloud Shell Editor 中,打开示例应用的源代码。
    打开 Cloud Shell Editor
  2. 在“Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。

Node.js

  1. 在 Cloud Shell Editor 中,打开示例应用的源代码。
    打开 Cloud Shell Editor
  2. 在“Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。

Python

  1. 在 Cloud Shell Editor 中,打开示例应用的源代码。
    打开 Cloud Shell Editor
  2. 在“Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。

启用 GKE 集群

启用您刚刚创建的 GKE 集群并将其设置为默认集群,以用于本快速入门中的其余命令。

按照以下方式运行 gcloud container clusters get-credentials 命令以启用 GKE 集群。
gcloud container clusters get-credentials gke-cloud-sql-quickstart \
  --region us-central1

设置服务账号

创建并配置供 GKE 使用的 Google Cloud 服务账号,使其具有包含连接到 Cloud SQL 的权限的 Cloud SQL Client 角色。
  1. 按照以下方式运行 gcloud iam service-accounts create 命令来创建新的服务账号:
    gcloud iam service-accounts create gke-quickstart-service-account \
      --display-name="GKE Quickstart Service Account"
  2. 按照以下方式运行 gcloud projects add-iam-policy-binding 命令,将 Cloud SQL Client 角色添加到您刚创建的 Google Cloud 服务账号。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/cloudsql.client"
  3. 示例应用使用日志记录功能,因此请按如下所示运行 gcloud projects add-iam-policy-binding 命令,将 Log Writer 角色添加到您刚刚创建的 Google Cloud 服务账号已创建。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
创建一个 Kubernetes 服务账号,然后使用 Workload Identity 将其绑定到 Google Cloud 服务账号,从而使其有权访问 Cloud SQL。
  1. 创建 Kubernetes 服务账号:
    1. 在 Cloud Shell Editor 中更新 service-account.yaml 文件。将 <YOUR-KSA-NAME> 替换为 ksa-cloud-sql
    2. 按照以下方式在 Cloud Shell 中运行 kubectl apply 命令:
      kubectl apply -f service-account.yaml
  2. 按照以下方式运行 gcloud iam service-accounts add-iam-policy-binding 命令以启用 Google Cloud 服务账号和 Kubernetes 服务账号的 IAM 绑定。进行以下替换:
    • YOUR_PROJECT_ID 替换为项目 ID。
    • YOUR_K8S_NAMESPACE 替换为 default,这是在 GKE 中创建的集群的默认命名空间。
    • YOUR_KSA_NAME 替换为 ksa-cloud-sql
    gcloud iam service-accounts add-iam-policy-binding \
      --role="roles/iam.workloadIdentityUser" \
      --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \
      gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
  3. 按照以下方式运行 kubectl annotate 命令以使用 IAM 绑定为 Kubernetes 服务账号添加注解。进行以下替换:
    • YOUR_KSA_NAME 替换为 ksa-cloud-sql
    • YOUR_PROJECT_ID 替换为项目 ID。
    kubectl annotate serviceaccount \
      YOUR_KSA_NAME  \
      iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com

配置 Secret

按照以下方式运行 kubectl create secret generic 命令,为示例应用要使用的数据库、用户和用户密码创建 Kubernetes Secret。每个 Secret 的值均基于本快速入门前面的步骤中指定的值。将 DB_PASS 替换为您在之前的创建用户快速入门步骤中创建的 quickstart-user 的密码。

kubectl create secret generic gke-cloud-sql-secrets \
  --from-literal=database=quickstart-db \
  --from-literal=username=quickstart-user \
  --from-literal=password=DB_PASS

构建示例应用

Go

  1. 在 Cloud Shell 中运行以下 gcloud artifacts repositories create 命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. 按照以下方式在 Cloud Shell 中运行 gcloud builds submit 命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

Java

  1. 在 Cloud Shell 中运行以下 gcloud artifacts repositories create 命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. 按照以下方式在 Cloud Shell 中运行 mvn 命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。
    mvn clean package com.google.cloud.tools:jib-maven-plugin:2.8.0:build \
      -Dimage=us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql \
      -DskipTests -Djib.to.credHelper=gcloud

Node.js

  1. 在 Cloud Shell 中运行以下 gcloud artifacts repositories create 命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. 按照以下方式在 Cloud Shell 中运行 gcloud builds submit 命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

Python

  1. 在 Cloud Shell 中运行以下 gcloud artifacts repositories create 命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. 按照以下方式在 Cloud Shell 中运行 gcloud builds submit 命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

部署示例应用

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 quickstart-instance 实例以打开实例详情页面。
  3. 在页面顶部的图标栏中,点击删除
  4. 删除实例对话框中,输入 quickstart-instance,然后点击删除以删除该实例。
  5. 在 Google Cloud Console 中,转到 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  6. 点击 gke-cloud-sql-quickstart 服务名称旁边的复选框。
  7. 点击 Google Kubernetes Engine 页面顶部的删除按钮。

可选的清理步骤

如果您没有使用为本快速入门创建的 Google Cloud 服务账号,则可以将其移除。

  1. 在 Google Cloud Console 中,转到 IAM 页面。

    转到 IAM

  2. 选中名为 gke-quickstart-service-account 的 IAM 账号对应的复选框。
  3. 点击移除,然后确认移除。

如果您没有使用在本快速入门中启用的 API,则可以将其停用。

  • 在本快速入门中启用的 API:
    • Compute Engine API
    • Cloud SQL Admin API
    • Google Kubernetes Engine API
    • Artifact Registry API
    • Cloud Build API
  1. 在 Google Cloud 控制台中,转到 API 页面。

    转到“API”

  2. 选择您要停用的任何 API,然后点击停用 API 按钮。

后续步骤

您可以根据自己的需求详细了解如何创建 Cloud SQL 实例

您还可以了解如何为 Cloud SQL 实例创建 PostgreSQL 用户数据库

另请参阅 Cloud SQL 价格信息

详细了解以下内容:

此外,您还可以了解如何从其他 Google Cloud 应用连接到 Cloud SQL 实例: