從 Google Kubernetes Engine 連線至 PostgreSQL 適用的 Cloud SQL

本頁面說明如何使用 Google Cloud 控制台和用戶端應用程式,在 Google Kubernetes Engine (GKE) 上部署連結至 PostgreSQL 執行個體的範例應用程式。假設您及時完成所有步驟 (包括清除作業),本快速入門導覽課程建立的資源通常不會超過一美元。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 啟用必要的 Google Cloud API,以便在 GKE 上執行 Cloud SQL 範例應用程式。

    控制台

    按一下「Enable APIs」(啟用 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 Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 選取「quickstart-instance」。
  3. 在 SQL 導覽選單中,選取「資料庫」
  4. 按一下 [Create database] (建立資料庫)。
    1. 在「New database」(新增資料庫) 對話方塊的「Database name」(資料庫名稱) 欄位中,輸入 quickstart-db
    2. 點選「建立」

gcloud

執行 gcloud sql databases create 指令來建立資料庫。

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

新增使用者

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「使用者」
  4. 按一下「新增使用者帳戶」
  5. 在「Add a user account to instance instance_name」(在執行個體「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 控制台中,前往「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 點選「建立」
  3. 按一下 GKE Autopilot 的「設定」
  4. 在「Name」(名稱) 中,將叢集名稱指定為 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 編輯器

有了 Cloud SQL 執行個體、資料庫和 GKE 叢集,您現在可以複製及設定範例應用程式,連線至 Cloud SQL 執行個體。本快速入門導覽課程的其餘步驟需要使用 gcloudkubectl 指令列工具。Cloud Shell 中已預先安裝這兩項工具。

Go

  1. 在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
    開啟 Cloud Shell 編輯器
  2. Open in Cloud Shell 對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。

Java

  1. 在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
    開啟 Cloud Shell 編輯器
  2. Open in Cloud Shell 對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。

Node.js

  1. 在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
    開啟 Cloud Shell 編輯器
  2. Open in Cloud Shell 對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。

Python

  1. 在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
    開啟 Cloud Shell 編輯器
  2. Open in Cloud Shell 對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。

啟用 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 的權限。
  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」(Cloud SQL 用戶端) 角色新增至您剛建立的 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 指令,將「記錄寫入者」角色新增至您剛建立的 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 編輯器中更新 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_NAMESPACEdefault 是在 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

設定密鑰

執行下列 kubectl create secret generic 指令,為範例應用程式使用的資料庫、使用者和使用者密碼建立 Kubernetes 密鑰。每個密鑰的值都以本快速入門導覽先前步驟中指定的值為準。將 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 Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 選取 quickstart-instance 執行個體,開啟「Instance details」(執行個體詳細資料) 頁面。
  3. 在頁面頂端的圖示列中,按一下 [刪除]
  4. 在「Delete instance」(刪除執行個體) 對話方塊中輸入 quickstart-instance,然後按一下「Delete」(刪除) 以刪除執行個體。
  5. 在 Google Cloud 控制台中,前往「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  6. 按一下「gke-cloud-sql-quickstart」服務名稱旁邊的核取方塊。
  7. 按一下 Google Kubernetes Engine 頁面頂端的「刪除」按鈕。

選用清除步驟

如果您未使用為本快速入門指南建立的 Google Cloud 服務帳戶,可以將其移除。

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往「IAM」頁面

  2. 選取名為「gke-quickstart-service-account」的 IAM 帳戶核取方塊。
  3. 按一下「移除」並確認移除

如果您未使用本快速入門導覽課程啟用的 API,可以停用這些 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 執行個體: