이 페이지에서는 Google Cloud용 Kf Cloud 서비스 브로커를 배포하고 이를 사용하여 지원 리소스를 프로비저닝 또는 프로비저닝 해제하는 방법을 보여줍니다. Kf Cloud 서비스 브로커에 대한 자세한 내용은 개념 및 아키텍처를 참조하세요.
환경 변수 만들기
Linux
export PROJECT_ID=YOUR_PROJECT_ID export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID export CLUSTER_NAME=kf-cluster export INSTANCE_NAME=cloud-service-broker export COMPUTE_REGION=us-central1
Windows Powershell
Set-Variable -Name PROJECT_ID -Value YOUR_PROJECT_ID Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID Set-Variable -Name CLUSTER_NAME -Value kf-cluster Set-Variable -Name INSTANCE_NAME -Value cloud-service-broker Set-Variable -Name COMPUTE_REGION -Value us-central1
Kf Cloud 서비스 브로커 데이터베이스 설정
MySQL용 Cloud SQL 인스턴스 만들기
gcloud sql instances create ${INSTANCE_NAME} --cpu=2 --memory=7680MB --require-ssl --region=${COMPUTE_REGION}
MySQL용 Cloud SQL 인스턴스에
servicebroker
라는 데이터베이스를 만듭니다.gcloud sql databases create servicebroker -i ${INSTANCE_NAME}
Kf Cloud 서비스 브로커에서 사용할 사용자 이름과 비밀번호를 만듭니다.
gcloud sql users create csbuser -i ${INSTANCE_NAME} --password=csbpassword
Kf Cloud 서비스 브로커용 Google 서비스 계정(GSA) 설정
Google 서비스 계정을 만듭니다.
gcloud iam service-accounts create csb-${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for CSB at ${CLUSTER_NAME}" \ --display-name="csb-${CLUSTER_NAME}"
서비스 계정에
roles/cloudsql.client
권한을 부여합니다. 이 작업은 Cloud SQL 인증 프록시를 통해 Kf Cloud Service Broker pod를 MySQL용 Cloud SQL 인스턴스에 연결하는 데 필요합니다.gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member="serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
서비스 계정에 추가 Google Cloud 권한을 부여합니다.
gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member="serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/compute.networkUser"
gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member="serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/cloudsql.admin"
gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member="serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/redis.admin"
권한을 확인합니다.
gcloud projects get-iam-policy ${CLUSTER_PROJECT_ID} \ --filter='bindings.members:serviceAccount:"CSB_SERVICE_ACCOUNT_NAME"' \ --flatten="bindings[].members"
Kf Cloud 서비스 브로커의 워크로드 아이덴티티 설정
Google 서비스 계정을 Kubernetes 서비스 계정과 결합합니다.
gcloud iam service-accounts add-iam-policy-binding "csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --project=${CLUSTER_PROJECT_ID} \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf-csb/csb-user]"
결합을 확인합니다.
gcloud iam service-accounts get-iam-policy "csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --project=${CLUSTER_PROJECT_ID}
Kubernete 보안 비밀을 설정하여 Kf Cloud 서비스 브로커와 구성 공유
config.yml 파일을 만듭니다.
cat << EOF >> ./config.yml gcp: credentials: "" project: ${CLUSTER_PROJECT_ID}
db: host: 127.0.0.1 password: csbpassword user: csbuser tls: false api: user: servicebroker password: password EOF
kf-csb
네임스페이스를 만듭니다.kubectl create ns kf-csb
Kubernetes 보안 비밀을 만듭니다.
kubectl create secret generic csb-secret --from-file=config.yml -n kf-csb
Kf Cloud 서비스 브로커 설치
kf-csb.yml
을 다운로드합니다.gcloud storage cp gs://kf-releases/csb/v1.0.0/kf-csb.yaml /tmp/kf-csb.yaml
/tmp/kf-csb.yaml
을 수정하고 자리표시자를 최종 값으로 바꿉니다. 아래 예시에서는sed
가 사용됩니다.sed -i "s|<GSA_NAME>|csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com|g" /tmp/kf-csb.yaml
sed -i "s|<INSTANCE_CONNECTION_NAME>|${CLUSTER_PROJECT_ID}:${COMPUTE_REGION}:${INSTANCE_NAME}|g" /tmp/kf-csb.yaml
sed -i "s|<DB_PORT>|3306|g" /tmp/kf-csb.yaml
Kf Cloud 서비스 브로커에 yaml을 적용합니다.
kubectl apply -f /tmp/kf-csb.yaml
Kf Cloud 서비스 브로커 설치 상태를 확인합니다.
kubectl get pods -n kf-csb
서비스 브로커 만들기
kf create-service-broker cloud-service-broker servicebroker password http://csb-controller.kf-csb/
설치 유효성 검사
마켓플레이스에서 사용 가능한 서비스를 확인합니다.
kf marketplace
모든 항목이 올바르게 설치 및 구성되면 다음을 확인할 수 있습니다.
$ kf marketplace
Broker Name Namespace Description
cloud-service-broker csb-google-bigquery A fast, economical and fully managed data warehouse for large-scale data analytics.
cloud-service-broker csb-google-dataproc Dataproc is a fully-managed service for running Apache Spark and Apache Hadoop clusters in a simpler, more cost-efficient way.
cloud-service-broker csb-google-mysql Mysql is a fully managed service for the Google Cloud Platform.
cloud-service-broker csb-google-postgres PostgreSQL is a fully managed service for the Google Cloud Platform.
cloud-service-broker csb-google-redis Cloud Memorystore for Redis is a fully managed Redis service for the Google Cloud Platform.
cloud-service-broker csb-google-spanner Fully managed, scalable, relational database service for regional and global application data.
cloud-service-broker csb-google-stackdriver-trace Distributed tracing service
cloud-service-broker csb-google-storage-bucket Google Cloud Storage that uses the Terraform back-end and grants service accounts IAM permissions directly on the bucket.
다음 단계
- Spring Music 가이드에서 Kf Cloud 서비스 브로커를 테스트합니다.
삭제
cloud-service-broker를 삭제합니다.
kf delete-service-broker cloud-service-broker
CSB 구성요소를 삭제합니다.
kubectl delete ns kf-csb
MySQL용 Kf Cloud 서비스 브로커 Cloud SQL 인스턴스를 삭제합니다.
gcloud sql instances delete ${INSTANCE_NAME} --project=${CLUSTER_PROJECT_ID}
IAM 정책 결합을 삭제합니다.
gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member='serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com' \ --role=roles/cloudsql.client
gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member='serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com' \ --role=roles/compute.networkUser
gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member='serviceAccount:csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com' \ --role=roles/redis.admin
GSA를 삭제합니다.
gcloud iam service-accounts delete csb-${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com \ --project=${CLUSTER_PROJECT_ID}