Google Kubernetes Engine에서 PostgreSQL용 Cloud SQL에 연결

이 페이지에서는 Google Cloud 콘솔과 클라이언트 애플리케이션을 사용하여 PostgreSQL 인스턴스에 연결된 Google Kubernetes Engine(GKE)에서 샘플 앱을 배포하는 방법을 설명합니다. 이 빠른 시작에서 만든 리소스는 정리 단계까지 모든 단계를 적시에 완료한다고 가정할 때 1달러(USD) 미만의 비용이 소요됩니다.

시작하기 전에

  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. GKE에서 Cloud SQL 샘플 앱을 실행하는 데 필요한 Google Cloud API를 사용 설정합니다.
    콘솔gcloud

    API 사용 설정을 클릭하여 빠른 시작에 필요한 API를 사용 설정합니다.

    API 사용 설정

    그러면 다음 API가 사용 설정됩니다.

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

    다음 버튼을 클릭하여 브라우저에서 직접 리소스에 대해 명령줄 액세스를 제공하는 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 인스턴스 만들기

공개 IP

콘솔gcloud

공개 IP 주소로 인스턴스 만들기

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. PostgreSQL을 클릭합니다.
  4. 인스턴스 IDquickstart-instance를 입력합니다.
  5. postgres 사용자의 비밀번호를 입력합니다. 나중에 사용할 수 있도록 이 비밀번호를 기록해 둡니다.
  6. 리전 및 영역 가용성 선택에 대해 단일 영역 옵션을 클릭합니다.
  7. 구성 표시 섹션을 클릭하여 확장합니다.
  8. 머신 유형 드롭다운 메뉴에서 경량을 선택합니다.
  9. 인스턴스 만들기를 클릭하고 인스턴스가 초기화되어 시작할 때까지 기다립니다.

공개 IP 주소로 인스턴스 만들기

다음과 같이 gcloud sql instances create 명령어를 실행하기 전에 DB_ROOT_PASSWORD를 데이터베이스 사용자의 비밀번호로 바꿉니다.

선택적으로 다음 매개변수에 대해 값을 수정합니다.

  • --database_version: 데이터베이스 엔진 유형 및 버전입니다. 지정하지 않으면 API 기본값이 사용됩니다. 현재 사용 가능한 버전을 보려면 gcloud 데이터베이스 버전 문서를 참조하세요.
  • --cpu: 머신에 사용하려는 코어 수입니다.
  • --memory: 머신에 사용하려는 메모리 양을 나타내는 정수 값입니다. 크기 단위를 제공해야 합니다(예: 3072MB 또는 9GB). 단위를 지정하지 않으면 GB로 간주됩니다.
  • --region: 인스턴스의 리전 위치입니다(예: asia-east1, us-east1). 지정되지 않은 상태로 두면 기본값us-central이 사용됩니다. 리전의 전체 목록을 참조하세요.

gcloud sql instances create 명령어를 사용하여 Cloud SQL 인스턴스를 만듭니다.

gcloud sql instances create quickstart-instance \
--database-version=POSTGRES_13 \
--cpu=1 \
--memory=4GB \
--region=us-central \
--root-password=DB_ROOT_PASSWORD

콘솔gcloud

비공개 IP 주소와 SSL을 사용 설정하여 인스턴스 만들기

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. PostgreSQL을 클릭합니다.
  4. 인스턴스 IDquickstart-instance를 입력합니다.
  5. postgres 사용자의 비밀번호를 입력합니다. 나중에 사용할 수 있도록 이 비밀번호를 기록해 둡니다.
  6. 리전 및 영역 가용성 선택에 대해 단일 영역 옵션을 클릭합니다.
  7. 구성 옵션 표시를 클릭하여 펼칩니다.
  8. 머신 유형으로 경량을 선택합니다.
  9. 연결에서 비공개 IP를 선택합니다.
  10. 네트워크 드롭다운 메뉴에서 기본값을 선택합니다.
  11. 비공개 서비스 액세스 연결 필요 대화상자가 표시되면 연결 설정 버튼을 클릭합니다.
    • Service Networking API 사용 설정 대화상자에서 API 사용 설정 버튼을 클릭합니다.
    • IP 범위 할당 대화상자에서 자동 할당된 IP 범위 사용을 선택하고 계속을 클릭합니다.
    • 연결 만들기 대화상자에서 연결 만들기를 클릭합니다.
  12. 비공개 IP만 있는 인스턴스를 만들려면 공개 IP 체크박스를 선택 해제합니다.
  13. 인스턴스 만들기를 클릭한 후 인스턴스가 초기화 및 시작될 때까지 기다립니다.
  14. 연결을 클릭합니다.
  15. 보안 섹션에서 SSL 연결만 허용을 선택하여 SSL 연결을 사용 설정합니다.
  16. SSL 연결만 허용 대화상자에서 저장을 클릭하고 인스턴스가 다시 시작될 때까지 기다립니다.

비공개 IP 주소와 SSL을 사용 설정하여 인스턴스 만들기

비공개 IP 주소로 인스턴스를 만들려면 비공개 서비스 액세스를 구성하여 GKE와 같은 다른 서비스에서 연결을 사용 설정해야 합니다. Google Cloud

  1. gcloud compute addresses create 명령어를 실행하여 비공개 서비스 액세스 연결의 IP 범위를 할당합니다.
  2. gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --description="peering range for Google" \
    --network=default
  3. gcloud services vpc-peerings connect 명령어를 실행하여 비공개 서비스 액세스 연결을 만듭니다.
  4. gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default
  5. 다음과 같이 gcloud sql instances create 명령어를 실행하여 인스턴스를 만들기 전에 DB_ROOT_PASSWORD를 데이터베이스 사용자의 비밀번호로 바꿉니다.

  6. 선택적으로 다음 매개변수에 대해 값을 수정합니다.

    • --database_version: 데이터베이스 엔진 유형 및 버전입니다. 지정하지 않으면 API 기본값이 사용됩니다. 현재 사용 가능한 버전 목록은 gcloud 데이터베이스 버전을 참조하세요.
    • --cpu: 머신의 코어 수입니다.
    • --memory: 머신에 포함하려는 메모리 양을 나타내는 정수입니다. 크기 단위를 제공할 수 있습니다(예: 3072MB 또는 9GB). 단위를 지정하지 않으면 GB로 간주됩니다.
    • --region: 인스턴스의 리전 위치입니다(예: asia-east1, us-east1). 지정하지 않으면 기본값 us-central1이 사용됩니다. 리전의 전체 목록을 참조하세요.

    gcloud sql instances create 명령어를 실행하여 비공개 IP 주소로 Cloud SQL 인스턴스를 만듭니다.

    gcloud beta sql instances create quickstart-instance \
    --database-version=POSTGRES_13 \
     --cpu=1 \
     --memory=4GB \
     --region=us-central \
     --root-password=DB_ROOT_PASSWORD \
     --no-assign-ip \
    --network=default
  7. gcloud sql instances patch 명령어를 실행하여 인스턴스의 SSL 연결만 허용합니다.

  8. gcloud sql instances patch quickstart-instance --require-ssl

데이터베이스 만들기

콘솔gcloud
  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. quickstart-instance를 선택합니다.
  3. SQL 탐색 메뉴에서 데이터베이스를 선택합니다.
  4. 데이터베이스 만들기를 클릭합니다.
    1. 새 데이터베이스 대화상자의 데이터베이스 이름 필드에 quickstart-db를 입력합니다.
    2. 만들기를 클릭합니다.

gcloud sql databases create 명령어를 실행하여 데이터베이스를 만듭니다.

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

사용자 만들기

콘솔gcloud
  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. SQL 탐색 메뉴에서 사용자를 선택합니다.
  4. 사용자 계정 추가를 클릭합니다.
  5. instance_name 인스턴스에 사용자 계정 추가 페이지에서 다음 정보를 추가합니다.
    • 사용자 이름: quickstart-user로 설정합니다.
    • 비밀번호: 데이터베이스 사용자의 비밀번호를 지정합니다. 이 빠른 시작의 이후 단계에서 사용할 수 있도록 기록해 둡니다.
  6. 추가를 클릭합니다.

다음과 같이 명령어를 실행하기 전에 DB_PASS를 데이터베이스 사용자의 비밀번호로 바꿉니다. 이 빠른 시작의 이후 단계에서 사용할 수 있도록 기록해 둡니다.

gcloud sql users create 명령어를 실행하여 사용자를 만듭니다.

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

Cloud SQL와 온프레미스 PostgreSQL의 사용자 이름 길이 한도는 동일합니다.

GKE 클러스터 만들기

콘솔gcloud
  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭합니다.
  3. GKE Autopilot의 구성을 클릭합니다.
  4. 이름에 클러스터 이름을 gke-cloud-sql-quickstart로 지정합니다.
  5. 만들기를 클릭합니다.

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에 사전 설치되어 있습니다.

  1. Cloud Shell 편집기에서 샘플 앱의 소스 코드를 엽니다.
    Cloud Shell 편집기 열기
  2. Open in Cloud Shell 대화상자에서 확인을 클릭하여 샘플 앱 코드를 다운로드하고 Cloud Shell 편집기에서 샘플 앱 디렉터리를 엽니다.
  1. Cloud Shell 편집기에서 샘플 앱의 소스 코드를 엽니다.
    Cloud Shell 편집기 열기
  2. Open in Cloud Shell 대화상자에서 확인을 클릭하여 샘플 앱 코드를 다운로드하고 Cloud Shell 편집기에서 샘플 앱 디렉터리를 엽니다.
  1. Cloud Shell 편집기에서 샘플 앱의 소스 코드를 엽니다.
    Cloud Shell 편집기 열기
  2. Open in Cloud Shell 대화상자에서 확인을 클릭하여 샘플 앱 코드를 다운로드하고 Cloud Shell 편집기에서 샘플 앱 디렉터리를 엽니다.
  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

서비스 계정 설정

Cloud SQL에 연결할 수 있는 권한이 있는 Cloud SQL 클라이언트 역할을 포함하도록 GKE에서 사용할 Google Cloud 서비스 계정을 만들고 구성합니다.
  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 명령어를 실행하여 방금 만든 Google Cloud 서비스 계정에 Cloud SQL 클라이언트 역할을 추가합니다. 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. 다음과 같이 gcloud projects add-iam-policy-binding 명령어를 실행하여 Artifact Registry 리더 역할을 서비스 계정에 추가하므로
    서비스 계정에서 아티팩토리 저장소에서 이미지를 가져올 수 있어야 합니다. 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"
GKE용 워크로드 아이덴티티 제휴를 사용하여 Google Cloud 서비스 계정에 바인딩해 Cloud SQL에 액세스할 수 있도록 구성된 Kubernetes 서비스 계정을 만듭니다.
  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_NAMESPACE를 GKE에서 생성된 클러스터의 기본 네임스페이스인 default로 바꿉니다.
    • ksa-cloud-sqlYOUR_KSA_NAME으로 바꿉니다.
    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 binding으로 Kubernetes 서비스 계정에 주석을 추가합니다. 다음을 바꿉니다.
    • ksa-cloud-sqlYOUR_KSA_NAME으로 바꿉니다.
    • 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

샘플 앱 빌드

  1. Cloud Shell에서 다음 gcloud artifacts repositories create 명령어를 실행하여 클러스터와 같은 리전에 gke-cloud-sql-repo라는 Artifact Registry에 저장소를 만듭니다. 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 .
  1. Cloud Shell에서 다음 gcloud artifacts repositories create 명령어를 실행하여 클러스터와 같은 리전에 gke-cloud-sql-repo라는 Artifact Registry에 저장소를 만듭니다. 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
  1. Cloud Shell에서 다음 gcloud artifacts repositories create 명령어를 실행하여 클러스터와 같은 리전에 gke-cloud-sql-repo라는 Artifact Registry에 저장소를 만듭니다. 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 .
  1. Cloud Shell에서 다음 gcloud artifacts repositories create 명령어를 실행하여 클러스터와 같은 리전에 gke-cloud-sql-repo라는 Artifact Registry에 저장소를 만듭니다. 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 .

샘플 앱 배포

공개 IP

샘플 앱 구성이 준비되었으면 이제 샘플 앱을 배포할 수 있습니다.

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음을 바꿉니다.
    • ksa-cloud-sql<YOUR_KSA_NAME>으로 바꿉니다.
    • us-central1<LOCATION>으로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • gke-cloud-sql-secrets<YOUR-DB-SECRET>로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Go Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Go Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Go Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Cloud SQL 자바 커넥터를 통해 Cloud SQL 인스턴스에 연결됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음을 바꿉니다.
    • ksa-cloud-sql<YOUR_KSA_NAME>으로 바꿉니다.
    • us-central1<LOCATION>으로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • gke-cloud-sql-secrets<YOUR-DB-SECRET>로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          # For more information about using Kubernetes service accounts see: 
          # https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts
          serviceAccountName: <YOUR-KSA-NAME> # TODO(developer): replace this value.
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_CONNECTION_NAME
              value: <INSTANCE_CONNECTION_NAME>
            - name: DB_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음을 바꿉니다.
    • ksa-cloud-sql<YOUR_KSA_NAME>으로 바꿉니다.
    • us-central1<LOCATION>으로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • gke-cloud-sql-secrets<YOUR-DB-SECRET>로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Node.js connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Node.js Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Node.js Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음을 바꿉니다.
    • ksa-cloud-sql<YOUR_KSA_NAME>으로 바꿉니다.
    • us-central1<LOCATION>으로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • gke-cloud-sql-secrets<YOUR-DB-SECRET>로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Python Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Python Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Python Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

샘플 앱 구성이 준비되었으면 이제 샘플 앱을 배포할 수 있습니다.

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음과 같이 교체하고 수정합니다.
    • <YOUR_KSA_NAME>ksa-cloud-sql로 바꿉니다.
    • <LOCATION>us-central1로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    • 비공개 IP 주소를 사용하여 Cloud SQL 인스턴스에 연결할 수 있도록 Cloud SQL 인증 프록시를 사용 설정합니다. # 주석 기호와 후행 공백을 삭제하여 "-ip_address_types=PRIVATE" 플래그의 주석 처리를 삭제합니다. 주석 처리가 삭제된 플래그는 다음과 같아야 합니다.
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Go Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Go Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Go Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Cloud SQL 자바 커넥터를 통해 Cloud SQL 인스턴스에 연결됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음을 바꿉니다.
    • ksa-cloud-sql<YOUR_KSA_NAME>으로 바꿉니다.
    • us-central1<LOCATION>으로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • gke-cloud-sql-secrets<YOUR-DB-SECRET>로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          # For more information about using Kubernetes service accounts see: 
          # https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts
          serviceAccountName: <YOUR-KSA-NAME> # TODO(developer): replace this value.
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_CONNECTION_NAME
              value: <INSTANCE_CONNECTION_NAME>
            - name: DB_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음과 같이 교체하고 수정합니다.
    • <YOUR_KSA_NAME>ksa-cloud-sql로 바꿉니다.
    • <LOCATION>us-central1로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    • 비공개 IP 주소를 사용하여 Cloud SQL 인스턴스에 연결할 수 있도록 Cloud SQL 인증 프록시를 사용 설정합니다. # 주석 기호와 후행 공백을 삭제하여 "-ip_address_types=PRIVATE" 플래그의 주석 처리를 삭제합니다. 주석 처리가 삭제된 플래그는 다음과 같아야 합니다.
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Node.js connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Node.js Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Node.js Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

배포된 샘플 앱은 Kubernetes 사이드카 패턴으로 실행되는 Cloud SQL 프록시를 통해 Cloud SQL 인스턴스에 연결됩니다. 사이드카 패턴은 샘플 앱의 컨테이너와 동일한 Kubernetes 포드를 공유하는 추가 컨테이너가 포함된 워크로드를 배포하는 방식으로 수행됩니다.

  1. gcloud sql instances describe 명령어를 실행하여 Cloud SQL 인스턴스 연결 이름을 가져옵니다.
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell 편집기에서 deployment.yaml 파일을 업데이트합니다. 다음과 같이 교체하고 수정합니다.
    • <YOUR_KSA_NAME>ksa-cloud-sql로 바꿉니다.
    • <LOCATION>us-central1로 바꿉니다.
    • <YOUR_PROJECT_ID>를 프로젝트 ID로 바꿉니다.
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets로 바꿉니다.
    • <INSTANCE_CONNECTION_NAME>을 이전 단계의 gcloud 명령어에서 검색한 Cloud SQL 인스턴스 연결 이름으로 바꿉니다. 형식은 project_id:region:instance_name입니다. 인스턴스 연결 이름은 Cloud SQL 인스턴스 개요 페이지에도 표시됩니다.
    • 비공개 IP 주소를 사용하여 Cloud SQL 인스턴스에 연결할 수 있도록 Cloud SQL 인증 프록시를 사용 설정합니다. # 주석 기호와 후행 공백을 삭제하여 "-ip_address_types=PRIVATE" 플래그의 주석 처리를 삭제합니다. 주석 처리가 삭제된 플래그는 다음과 같아야 합니다.
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Python Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "5432"
            # For Automatic IAM Authentication with the Python Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Python Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=5432"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell에서 다음과 같이 kubectl apply 명령어를 실행하여 샘플 앱을 배포합니다.
    kubectl apply -f deployment.yaml
  4. 인터넷을 통해 액세스할 수 있도록 다음과 같이 kubectl apply 명령어를 실행하여 배포 앞에 부하 분산기를 추가합니다.
    kubectl apply -f service.yaml
  5. 다음과 같이 kubectl get 명령어를 실행하여 서비스 세부정보를 가져옵니다.
    kubectl get services
  6. 외부 IP 주소를 서비스 세부정보에서 사용할 수 있게 되면 이 주소를 복사합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
  7. 배포된 샘플 앱을 봅니다. 브라우저 창을 열고 서비스의 외부 IP 주소로 이동합니다.

    배포된 샘플 앱 보기

삭제

이 페이지에서 사용한 리소스 비용이 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 페이지로 이동합니다.

    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 인스턴스에 연결하는 방법을 알아보세요.