ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ ์ ์ฉ
๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ Apigee Hybrid๋ฅผ ์ค์นํฉ๋๋ค.
- ํ์ฌ ์์น๊ฐ
hybrid-base-directory/hybrid-files
๋๋ ํฐ๋ฆฌ์ธ์ง ํ์ธํฉ๋๋ค.cd $HYBRID_FILES
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ
kubectl
์ด ์ฌ๋ฐ๋ฅธ ์ปจํ ์คํธ๋ก ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค. ํ์ฌ ์ปจํ ์คํธ๋ฅผ Apigee Hybrid๋ฅผ ๋ฐฐํฌํ๋ ํด๋ฌ์คํฐ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.kubectl config current-context
๊ฒฐ๊ณผ์๋ Apigee Hybrid๋ฅผ ๋ฐฐํฌํ๋ ํด๋ฌ์คํฐ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด GKE์์ ์ปจํ ์คํธ ์ด๋ฆ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด
gke_project-id_cluster-location_cluster-name
ํ์์ ๋๋ค.gke_my-project_us-central1_my-cluster
์ด๋ฆ์ด ์ปจํ ์คํธ์ ํด๋ฌ์คํฐ ์ด๋ฆ๊ณผ ์ผ์นํ์ง ์์ผ๋ฉด ๋ค์ ๋ช ๋ น์ด๋ ํด๋ฌ์คํฐ์
gcloud
์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณkubectl
์ปจํ ์คํธ๋ฅผ ์ค์ ํฉ๋๋ค.๋ฆฌ์ ํด๋ฌ์คํฐ
gcloud container clusters get-credentials $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
์์ญ ํด๋ฌ์คํฐ
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
- ๋ฒ ์ด๋ฉํ์ฉ Anthos, AWS on GKE, EKS, GKE On-Prem ํ๋ซํผ์ ๊ฒฝ์ฐ ๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด
KUBECONFIG
๋ณ์๊ฐ ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.echo ${KUBECONFIG}
- ํ
์คํธ ์คํ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ํ
์คํธ ์คํ์ ์ํํ๋ฉด ํด๋ฌ์คํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด
--dry-run
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌinit
๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
- ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด
init
๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml
init
๋ช ๋ น์ด๋ Apigee ๋ฐฐํฌ ์๋น์ค Apigee ๋ฐฐํฌ ์ปจํธ๋กค๋ฌ์ Apigee ํ์ฉ ์นํ ์ ์ค์นํฉ๋๋ค. - ๋ฐฐํฌ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
kubectl get pods -n apigee-system
kubectl get pods -n apigee
ํฌ๋๊ฐ ์ค๋น๋๋ฉด ๋ค์ ๋จ๊ณ๋ก ์ด๋ํฉ๋๋ค.
- ํ
์คํธ ์คํ์ ์ค์นํฉ๋๋ค.
--dry-run
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌapply
๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
- ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ Apigee๋ณ ๋ฐํ์ ๊ตฌ์ฑ์์๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
- ๋ฐฐํฌ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ธ์.
${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
ํฌ๋๊ฐ ๋ชจ๋ ์ค๋น๋ ๋๊น์ง ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ํฌ๋๊ฐ ์์๋๋ ๋ฐ ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๊ฐ ์๋ GKE
GKE ๊ธฐ๋ฐ์ Apigee Hybrid ์ค์น์์๋ Google Cloud๊ฐ Hybrid ๋ฐํ์ ๊ตฌ์ฑ์์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ผ๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
Google Cloud ์๋น์ค ๊ณ์ ๋ฐ Kubernetes ์๋น์ค ๊ณ์
Google Cloud ์๋น์ค ๊ณ์ ์ ์๋น์ค ๊ณ์ ์์ฒด๋ก ์ธ์ฆํ์ฌ ์น์ธ๋ API ํธ์ถ์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํน๋ณํ ์ ํ์ ๊ณ์ ์ ๋๋ค. Google Cloud ์๋น์ค ๊ณ์ ์๋ ๊ฐ๋ณ ์ฌ์ฉ์์ ๋น์ทํ ์ญํ ๋ฐ ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋น์ค ๊ณ์ ์ผ๋ก ์ธ์ฆ๋๋ฉด ์๋น์ค ๊ณ์ ์ ์ก์ธ์ค ๊ถํ์ด ์๋ ๋ชจ๋ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. Google Cloud ์๋น์ค ๊ณ์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์๋น์ค ๊ณ์ ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
4๋จ๊ณ: ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ์์ Apigee Hybrid ์ค์น์ ๋ํ Google Cloud ์๋น์ค ๊ณ์ ์ ๋ง๋ค์์ต๋๋ค. Apigee๋ ์ด๋ฌํ ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํด์ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์ฑ์์๋ฅผ ์ธ์ฆํฉ๋๋ค.
Kubernetes ์๋น์ค ๊ณ์ ์ Google Cloud ์๋น์ค ๊ณ์ ๊ณผ ๋น์ทํฉ๋๋ค. Kubernetes ์๋น์ค ๊ณ์ ์ ํฌ๋์์ ์คํ๋๋ ํ๋ก์ธ์ค์ ๋ํ ID๋ฅผ ์ ๊ณตํ๋ฉฐ ์ฌ์ฉ์์ ๋น์ทํ๊ฒ API ์๋ฒ์ ์ธ์ฆ์ ์ํํ๋๋ก ํ์ฉํฉ๋๋ค. Kubernetes ์๋น์ค ๊ณ์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ํฌ๋์ ๋ํ ์๋น์ค ๊ณ์ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.
apigeectl
๋๊ตฌ๋ ์ด์ ์ ์ฐจ์์ apigeectl apply
๋ฅผ ์คํํ ๋ Apigee Hybrid์ ํ์ํ Kubernetes ์๋น์ค ๊ณ์ ์ ๋๋ถ๋ถ ๋ง๋ค์์ต๋๋ค.
GKE์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํ๋ฉด Google Cloud ์๋น์ค ๊ณ์ ์ด Kubernetes ํด๋ฌ์คํฐ์ ์๋ Kubernetes ์๋น์ค ๊ณ์ ๊ณผ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Kubernetes ์๋น์ค ๊ณ์ ์ด Google Cloud ์๋น์ค ๊ณ์ ์ ๊ฐ์ฅํ๊ณ ํ ๋น๋ ์ญํ ๋ฐ ๊ถํ์ ์ฌ์ฉํด์ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์ฑ์์์ ์ธ์ฆ์ ์ํํ ์ ์์ต๋๋ค.
์๋ด์ ๋ฐ๋ผ ํ๋ก์ ํธ์ ๋ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ๊ตฌ์ฑ ์ค๋น
์ด ์ ์ฐจ์์๋ ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ์๋์๋์ง ํ์ธํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ํฉ๋๋ค.
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ
gcloud
๊ตฌ์ฑ์ด Google Cloud ํ๋ก์ ํธ ID๋ก ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.gcloud config get project
apigee-cassandra-restore
Kubernetes ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค.apigeectl apply
๋ฅผ ์คํํ์ฌ ๊ตฌ์ฑ์ ์ ์ฉํ ๊ฒฝ์ฐ ์ด ๋ช ๋ น์ด๋ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ์ ํ์ํ ๋๋ถ๋ถ์ Kubernetes ์๋น์ค ๊ณ์ ์ ๋ง๋ค์์ต๋๋ค.apigee-cassandra-restore
Kubernetes ์๋น์ค ๊ณ์ ์ ๋ง๋ค๋ ค๋ฉด--restore
ํ๋๊ทธ๊ณผ ํจ๊ปapigeectl apply
๋ฅผ ์คํํฉ๋๋ค.$APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
- GKE ํด๋ฌ์คํฐ์ ๋ํ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค. 1๋จ๊ณ: ํด๋ฌ์คํฐ ๋ง๋ค๊ธฐ์์ ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ ๊ฒฝ์ฐ 11๋จ๊ณ๋ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ฆฌ์ ํด๋ฌ์คํฐ
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
์์ญ ํด๋ฌ์คํฐ
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋ฉ๋๋ค.
--- workloadPool: PROJECT_ID.svc.id.goog
๊ฒฐ๊ณผ์
null
๊ฐ ๋์ ํ์๋๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํด๋ฌ์คํฐ์ ๋ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.๋ฆฌ์ ํด๋ฌ์คํฐ
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
์์ญ ํด๋ฌ์คํฐ
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๊ฐ ๋ ธ๋ ํ์ ๋ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์ด ์์ ์ ๊ฐ ๋ ธ๋์ ๋ํด ์ต๋ 30๋ถ ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๋ฆฌ์ ํด๋ฌ์คํฐ
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
์์ญ ํด๋ฌ์คํฐ
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
์ฌ๊ธฐ์ NODE_POOL_NAME๋ ๊ฐ ๋ ธ๋ ํ์ ์ด๋ฆ์ ๋๋ค. ๋๋ถ๋ถ์ Apigee Hybrid ์ค์น์์ ๋ ๊ธฐ๋ณธ ๋ ธ๋ ํ์ ์ด๋ฆ์
apigee-data
๋ฐapigee-runtime
์ ๋๋ค. - ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋
ธ๋ ํ์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.
๋ฆฌ์ ํด๋ฌ์คํฐ
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
์์ญ ํด๋ฌ์คํฐ
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
๋ค์๊ณผ ๋น์ทํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
- ํ๋ก์ ํธ์ ๋ํด Google Cloud ์๋น์ค ๊ณ์ ์ ์ด๋ฆ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํ๋๋ก Kubernetes ์๋น์ค ๊ณ์ ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ์ด ์ด๋ฆ์ด ํ์ํฉ๋๋ค. ๋นํ๋ก๋์
์ค์น์ ๊ฒฝ์ฐ Google ์๋น์ค ๊ณ์ ์ด ํ๋๋ง ์์ด์ผ ํฉ๋๋ค. ํ๋ก๋์
์ค์น์ ๊ฒฝ์ฐ 8๊ฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
gcloud iam service-accounts list --project $PROJECT_ID
๋ค์๊ณผ ๋น์ทํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋นํ๋ก๋์
๋นํ๋ก๋์ ํ๊ฒฝ์ ๊ฒฝ์ฐ:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
ํ๋ก๋์
๋นํ๋ก๋์ ํ๊ฒฝ์ ๊ฒฝ์ฐ:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
- Kubernetes ์๋น์ค ๊ณ์ ์ ์ด๋ฆ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ์ด ์ ์ฐจ์ ๋ท๋ถ๋ถ์์ Google Cloud ์๋น์ค ๊ณ์ ๊ณผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ด ์ด๋ฆ ๋ชฉ๋ก์ด ํ์ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์.
kubectl get sa -n $NAMESPACE
์ถ๋ ฅ์ด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค. ๊ตต๊ฒ ํ์๋ Kubernetes ์๋น์ค ๊ณ์ ์ด Google ํด๋ผ์ฐ๋ ์๋น์ค ๊ณ์ ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐ ํ์ํ ๊ณ์ ์ ๋๋ค.
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
ํ์ํ ๊ฒฝ์ฐ ํ์ฌ gcloud
๊ตฌ์ฑ์ ์ค์ ํฉ๋๋ค.
gcloud config set project $PROJECT_ID
์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ๊ตฌ์ฑ
๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ ํ์ด๋ธ๋ฆฌ๋ ์ค์น์ ๋ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
-
๊ฐ Apigee ๊ตฌ์ฑ์์์ ๋ํด์๋ ํด๋น Kubernetes ์๋น์ค ๊ณ์ ์ ๊ตฌ์ฑ์์์ ๋ํ Google ์๋น์ค ๊ณ์ ์ผ๋ก ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
๋ค์ ๋จ๊ณ์์๋ ๋ ๊ฐ์ง ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋ช ๋ น์ด ์งํฉ ์ ์ ๋ค์ ๋ณ์์ ๊ฐ์ ์ฌ์ค์ ํฉ๋๋ค.
- GSA_NAME: Google ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์
๋๋ค. ์ด ์ด๋ฆ์ 4๋จ๊ณ: ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ์
create-service-account
๋๊ตฌ๋ก ๋ง๋ ์๋น์ค ๊ณ์ ์ ๋๋ค. - KSA_NAME: Kubernetes ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์
๋๋ค.
kubectl get sa -n $NAMESPACE
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋์ดํ ๊ณ์ (์:apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
)์ ๋๋ค.
- GSA_NAME: Google ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์
๋๋ค. ์ด ์ด๋ฆ์ 4๋จ๊ณ: ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ์
- Cassandra
Cassandra ๊ตฌ์ฑ์์์ ๋ํด ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Cassandra ๊ตฌ์ฑ์์์๋ 6๊ฐ์ ์ฐ๊ฒฐ๋ Kubernetes ์๋น์ค ๊ณ์ ์ด ์์ต๋๋ค.
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= ๊ฒ์ฆ)apigee-cassandra-user-setup
apigee-datastore-default
๋นํ๋ก๋์
apigee-cassandra-backup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํ๊ฒ ์ฃผ์์ ์ค๋ช ํ๋ ์ค์ด ์์ด์ผ ํฉ๋๋ค.
Annotations: iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com
apigee-cassandra-restore
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค.KSA_NAME="apigee-cassandra-restore"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-cassandra-schema-setup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-cassandra-schema-val
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-cassandra-user-setup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-datastore-default-sa
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค.KSA_NAME="apigee-datastore-default-sa"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
apigee-cassandra-backup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํ๊ฒ ์ฃผ์์ ์ค๋ช ํ๋ ์ค์ด ์์ด์ผ ํฉ๋๋ค.
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
apigee-cassandra-restore
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค.KSA_NAME="apigee-cassandra-restore"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
.- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
apigee-cassandra-schema-val
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-cassandra-user-setup
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
apigee-datastore-default-sa
Kubernetes ์๋น์ค ๊ณ์ ๊ตฌ์ฑKSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค.KSA_NAME="apigee-datastore-default-sa"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
Apigee Connect ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- MART
MART ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee ์ธก์ ํญ๋ชฉ
Apigee ์ธก์ ํญ๋ชฉ ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.KSA_NAME="apigee-metrics-sa"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- UDCA(์กฐ์ง ์์ค)
์กฐ์ง ์์ค UDCA ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
UDCA๋ ์กฐ์ง ์์ค ๋ฒ์ ๋ฐ ํ๊ฒฝ ์์ค ๋ฒ์ ๋ชจ๋์์ ๊ตฌํ๋ฉ๋๋ค. ๋ฐ๋ผ์ UDCA์๋ ๋ฒ์๋น ํ๋์ฉ ๋ ๊ฐ์ ๊ฐ๋ณ Kubernetes ์๋น์ค ๊ณ์ ์ด ์์ต๋๋ค. ๊ณ์ ์ด๋ฆ์ผ๋ก ์ด๋ฅผ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. env-scope ๊ณ์ ์ ์๋น์ค ๊ณ์ ์ด๋ฆ์ ํ๊ฒฝ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์กฐ์ง ์์ค:
apigee-udca-my-project-id-123abcd-sa
์ฌ๊ธฐ์my-project-id
๋ ์ด๋ฆ ํ๋ก์ ํธ ID์ ๋๋ค. - ํ๊ฒฝ ์์ค:
apigee-udca-my-project-id-my-env-234bcde-sa
, ์ฌ๊ธฐ์my-env
๋ ํ๊ฒฝ ์ด๋ฆ์ ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- ์กฐ์ง ์์ค:
- Apigee Watcher
Apigee Watcher ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- ๋ฐํ์
Apigee ๋ฐํ์ ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- ๋๊ธฐํ ๋ด๋น์
๋๊ธฐํ ๋ด๋น์ ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- UDCA(ํ๊ฒฝ ์์ค)
ํ๊ฒฝ ์์ค UDCA ๊ตฌ์ฑ์์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋นํ๋ก๋์
KSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
ํ๋ก๋์
KSA_NAME
๋ฐGSA_NAME
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
.- IAM ์ญํ ์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- ์๋น์ค ๊ณ์ ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- ์ฃผ์์ ํ์ธํฉ๋๋ค.
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- ์ ํ์ฌํญ: ๋ค์ด๋ก๋ํ ์๋น์ค ๊ณ์ ํค ํ์ผ์ ๋ชจ๋ ์ญ์ ํฉ๋๋ค.
create-service-account
๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Google ์๋น์ค ๊ณ์ ์ ๋ง๋ ๊ฒฝ์ฐ ์๋น์ค ๊ณ์ ํค๊ฐ ์์ฑ๋๊ณ.json
ํค ํ์ผ์ด ๋ค์ด๋ก๋๋์์ ์ ์์ต๋๋ค. GKE์์ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ๋ฅผ ์ฌ์ฉํ ๋๋ ์ด๋ฌํ ํค ํ์ผ์ด ํ์ํ์ง ์์ต๋๋ค.๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํค ํ์ผ์ ์ญ์ ํ ์ ์์ต๋๋ค.
rm $HYBRID_FILES/service-accounts/*.json
์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ํ์ธ
- (์ ํ์ฌํญ) Google Cloud console์ Kubernetes: ์ํฌ๋ก๋ ๊ฐ์ ํ์ด์ง์์ Kubernetes ์๋น์ค ๊ณ์ ์ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
apigeectl check-ready
๋ก ๋ฐฐํฌ ์ํ๋ฅผ ๋ค์ ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ธ์.${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml