从 Google Kubernetes Engine 连接到 Cloud SQL for PostgreSQL
本页面介绍如何使用 Google Cloud 控制台和客户端应用在连接到 PostgreSQL 实例的 Google Kubernetes Engine (GKE) 上部署示例应用。如果您及时完成本快速入门中的步骤(包括清理),那么在此期间所创建资源的费用通常不会超过 1 美元。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
所需的角色
如需获得完成本快速入门中所述任务所需的权限,请让您的管理员为您授予快速入门项目的以下 IAM 角色:
-
创建、更新或删除所有 Cloud SQL 实例、数据库和用户:
-
Cloud SQL Admin (
roles/cloudsql.admin) -
Compute Viewer (
roles/compute.viewer)
-
Cloud SQL Admin (
-
创建具有专用 IP 的 Cloud SQL 实例(专用服务访问通道连接):
Compute 网络管理员 (
roles/compute.networkadmin) -
创建和管理 Google Kubernetes Engine 集群:
Kubernetes Engine Admin (
roles/container.admin) -
为项目创建和管理服务账号:
-
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Service Account Admin (
roles/serviceAccountAdmin)
-
Project IAM Admin (
-
在 Artifact Registry 中为项目创建制品库:
Artifact Registry Administrator (
roles/artifactregistry.admin) -
在 Cloud Build 中提交和构建应用:
-
Cloud Build Editor (
roles/cloudbuilds.builds.editor) -
Storage Object Creator (
roles/storage.objectCreator) -
Storage Bucket Viewer (
roles/storage.bucketViewer) -
Service Account User (
roles/iam.serviceAccountUser) -
Logs Viewer (
roles/logging.viewer)
-
Cloud Build Editor (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
设置 Cloud SQL
创建 Cloud SQL 实例
创建数据库
请按以下步骤创建数据库:
控制台
-
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 选择
quickstart-instance。 - 从 SQL 导航菜单中选择数据库。
- 点击创建数据库。
- 在新建数据库对话框的数据库名称字段中,输入
quickstart-db。 - 点击创建。
gcloud
运行 gcloud
sql databases create 命令以创建数据库。
gcloud sql databases create quickstart-db --instance=quickstart-instance
创建用户
控制台
-
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 从 SQL 导航菜单中选择用户。
- 点击添加用户账号。
- 在将一个用户账号添加到实例 instance_name 页面中,添加以下信息:
- 用户名:设为
quickstart-user - 密码:指定数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。
- 用户名:设为
- 点击添加。
gcloud
按照以下方式运行命令之前,请将 DB_PASS 替换为数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。
运行 gcloud sql users create 命令以创建用户。
gcloud sql users create quickstart-user \ --instance=quickstart-instance \ --password=DB_PASS
Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。
创建 GKE 集群
控制台
-
在 Google Cloud 控制台中,前往 Google Kubernetes Engine 页面。
- 点击创建。
- 点击 GKE Autopilot 的配置。
- 对于名称,请将集群名称指定为
gke-cloud-sql-quickstart。 - 点击创建。
gcloud
运行 gcloud container clusters create-auto 命令以创建集群。
gcloud container clusters create-auto gke-cloud-sql-quickstart \ --region us-central1
使用 Cloud Shell 从 GitHub 克隆 Cloud SQL 示例应用
创建好 Cloud SQL 实例、数据库和 GKE 集群后,您现在可以克隆和配置连接到 Cloud SQL 实例的示例应用。示例应用存储在 GitHub 中。
本快速入门中的其余步骤需要使用 Cloud Shell、gcloud 和 kubectl。
gcloud 和 kubectl 工具已预安装在 Cloud Shell 中。
Go
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Java
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Node.js
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Python
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
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
设置服务账号
-
按照以下方式运行
gcloud iam service-accounts create命令来创建新的服务账号:gcloud iam service-accounts create gke-quickstart-service-account \ --display-name="GKE Quickstart Service Account"
- 按如下所示运行
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"
- 示例应用使用日志记录功能,因此请按如下所示运行
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"
- 服务账号必须能够从 Artifactory 制品库拉取映像,因此请按如下所示运行
gcloud projects add-iam-policy-binding命令以向服务账号添加 Artifact Registry Reader 角色。将 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/artifactregistry.reader"
- 创建 Kubernetes 服务账号:
- 在 Cloud Shell Editor 中更新
service-account.yaml文件。将<YOUR-KSA-NAME>替换为ksa-cloud-sql。 - 按照以下方式在 Cloud Shell 中运行
kubectl apply命令:kubectl apply -f service-account.yaml
- 在 Cloud Shell Editor 中更新
- 按如下所示运行
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
- 按照以下方式运行
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
- 将 YOUR_KSA_NAME 替换为
配置 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
- 返回 Cloud Shell 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
-
在 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"
- 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。
示例应用目录包含示例应用的
Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:cd ~/cloudshell_open/golang-samples/cloudsql/postgres/database-sql
- 按照以下方式运行
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
- 返回 Cloud Shell 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
-
在 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"
- 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。
示例应用目录包含示例应用的
pom.xml。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:cd ~/cloudshell_open/java-docs-samples/cloud-sql/postgres/servlet
- 按照以下方式运行
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
- 返回 Cloud Shell 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
-
在 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"
- 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。
示例应用目录包含示例应用的
Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:cd ~/cloudshell_open/nodejs-docs-samples/cloud-sql/postgres/knex
- 按照以下方式运行
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
- 返回 Cloud Shell 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
-
在 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"
- 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。
示例应用目录包含示例应用的
Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:cd ~/cloudshell_open/python-docs-samples/cloud-sql/postgres/sqlalchemy
- 按照以下方式运行
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 账号产生费用,请按照以下步骤操作。
-
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 选择
quickstart-instance实例以打开实例详情页面。 - 在页面顶部的图标栏中,点击删除。
- 在删除实例对话框中,输入
quickstart-instance,然后点击删除以删除该实例。 -
在 Google Cloud 控制台中,前往 Google Kubernetes Engine 页面。
- 点击
gke-cloud-sql-quickstart服务名称旁边的复选框。 - 点击 Google Kubernetes Engine 页面顶部的删除按钮。
可选的清理步骤
如果您没有使用为本快速入门创建的 Google Cloud 服务账号,则可以将其移除。
-
在 Google Cloud 控制台中,打开服务账号页面。
- 选中名为
gke-quickstart-service-account的 IAM 账号对应的复选框。 - 点击移除,然后确认移除。
如果您没有使用在本快速入门中启用的 API,则可以将其停用。
- 在本快速入门中启用的 API:
- Compute Engine API
- Cloud SQL Admin API
- Google Kubernetes Engine API
- Artifact Registry API
- Cloud Build API
在 Google Cloud 控制台中,前往 API 页面。
选择您要停用的任何 API,然后点击停用 API 按钮。
后续步骤
您可以根据自己的需求详细了解如何创建 Cloud SQL 实例。您还可以了解如何为 Cloud SQL 实例创建 PostgreSQL 用户和数据库。
另请参阅 Cloud SQL 价格信息。
详细了解以下内容:
此外,您还可以了解如何从其他 Google Cloud 应用连接到 Cloud SQL 实例:
