从 Google Kubernetes Engine 连接到 Cloud SQL for SQL Server

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

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  6. 安装 gcloud CLI

  7. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  8. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  9. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  13. 安装 gcloud CLI

  14. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  15. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init

所需的角色

如需获得完成本快速入门中所述任务所需的权限,请让您的管理员为您授予快速入门项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

设置 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

创建 GKE 集群

控制台

  1. 在 Google Cloud 控制台中,前往 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 Shell 从 GitHub 克隆 Cloud SQL 示例应用

创建好 Cloud SQL 实例、数据库和 GKE 集群后,您现在可以克隆和配置连接到 Cloud SQL 实例的示例应用。示例应用存储在 GitHub 中。 本快速入门中的其余步骤需要使用 Cloud Shell、gcloudkubectlgcloudkubectl 工具已预安装在 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

设置服务账号

创建并配置 Google Cloud 服务账号以供 GKE 使用,使其具有有权连接到 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"
  4. 服务账号必须能够从 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 服务账号,然后使用 Workload Identity Federation for GKE 将其绑定到 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 替换为在创建 Cloud SQL 实例步骤中创建的 sqlserver 根用户的密码。

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

构建示例应用

Go

  1. 返回 Cloud Shell 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
  2. 在 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"
  3. 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。 示例应用目录包含示例应用的 Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:
    cd ~/cloudshell_open/golang-samples/cloud-sql/sqlserver/database-sql
      
  4. 按照以下方式运行 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 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
  2. 在 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"
  3. 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。 示例应用目录包含示例应用的 pom.xml。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:
    cd ~/cloudshell_open/java-docs-samples/cloud-sql/sqlserver/servlet
      
  4. 按照以下方式运行 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 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
  2. 在 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"
  3. 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。 示例应用目录包含示例应用的 Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:
    cd ~/cloudshell_open/nodejs-docs-samples/cloud-sql/sqlserver/mssql
      
  4. 按照以下方式运行 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 编辑器,然后点击打开终端以打开 Cloud Shell 提示符。
  2. 在 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"
  3. 将目录更改为您之前从 GitHub 克隆 Cloud SQL 示例应用的位置。 示例应用目录包含示例应用的 Dockerfile。例如,如需将目录更改为示例应用的目录,您可以运行如下命令:
    cd ~/cloudshell_open/python-docs-samples/cloud-sql/sql-server/sqlalchemy
      
  4. 按照以下方式运行 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 控制台中,前往 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

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

可选的清理步骤

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

  1. 在 Google Cloud 控制台中,打开服务账号页面。

    进入 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 实例创建 SQL Server 用户数据库

另请参阅 Cloud SQL 价格信息

详细了解以下内容:

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