๋๊ธฐํ ๋ด๋น์ ์ก์ธ์ค ์ฌ์ฉ ์ค์
๋๊ธฐํ ๋ด๋น์ ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- Google Cloud ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ณ ์ด ๊ณ์ ์ Apigee ์กฐ์ง ๊ด๋ฆฌ์ ์ญํ ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์๋น์ค ๊ณ์ ์ ์ดํ ๋จ๊ณ์์ ์ํํ API ํธ์ถ์ ์ธ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. GCP Console์ ์ฌ์ฉํ๋ฉด ์๋น์ค ๊ณ์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ GCP ๋ฌธ์์ ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด ๋ค์
gcloud
๋ช ๋ น์ด๋ ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ณ Apigee ์กฐ์ง ๊ด๋ฆฌ์ ์ญํ ์ ํ ๋นํฉ๋๋ค.- ๊ณ์ ์ ๋ง๋ญ๋๋ค.
gcloud iam service-accounts create apigee-org-admin \ --display-name="apigee-org-admin"
์ฌ๊ธฐ์ apigee-org-admin์ ๋ง๋ค๋ ค๋ ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ '
apigee-org-admin
'์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. - ์๋น์ค ๊ณ์ ์ Apigee ์กฐ์ง ๊ด๋ฆฌ์ ์ญํ ์ ํ ๋นํฉ๋๋ค.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-org-admin@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.admin"
๊ฐ ํญ๋ชฉ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- $PROJECT_ID๋ 2๋จ๊ณ: Google Cloud ํ๋ก์ ํธ ๋ง๋ค๊ธฐ์์ ๋ง๋ Google Cloud ํ๋ก์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- apigee-org-admin์ ๋ฐฉ๊ธ ๋ง๋ ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ ๋๋ค.
- roles/apigee.admin์ Apigee ์กฐ์ง ๊ด๋ฆฌ์ ์ญํ ์ ๋๋ค.
- ๊ณ์ ์ ๋ง๋ญ๋๋ค.
- ์๋น์ค ๊ณ์ ํค๋ฅผ ์์คํ
์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ
service-accounts/
๋๋ ํฐ๋ฆฌ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ GCP ๋ฌธ์์ ์๋น์ค ๊ณ์ ํค ๋ง๋ค๊ธฐ์ ์๋ด๋ฅผ ์ฐธ์กฐํ์ธ์.- ํ์ฌ ์์น๊ฐ
/hybrid-base-directory/hybrid-files/
๋๋ ํฐ๋ฆฌ์ธ์ง ํ์ธํฉ๋๋ค. - ํค๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud iam service-accounts keys create ./service-accounts/$PROJECT_ID-apigee-org-admin.json \ --iam-account apigee-org-admin@$PROJECT_ID.iam.gserviceaccount.com
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
created key [a0b1c2d3e4f5a0b1c2d3e4f5a0b1c2d3e4f5a0b1] of type [json] as [./service-accounts/hybrid- example-apigee-org-admin.json] for [apigee-org-admin@my-hybrid.iam.gserviceaccount.com] $
- ํ์ฌ ์์น๊ฐ
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Apigee ์กฐ์ง ๊ด๋ฆฌ์ ์๋น์ค ๊ณ์ ํค์ ๊ฒฝ๋ก๋ฅผ ํ์ธํฉ๋๋ค.
ls service-accounts/*admin*
๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค.
service-accounts/hybrid-example-apigee-org-admin.json
- ํค ํ์ผ ์ด๋ฆ์ผ๋ก ORG_ADMIN_ACCOUNT ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
export ORG_ADMIN_ACCOUNT="hybrid-example-2-apigee-org-admin.json"
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ ํฐ์ ๊ฐ์ ธ์ต๋๋ค.
export GOOGLE_APPLICATION_CREDENTIALS=./service-accounts/$ORG_ADMIN_ACCOUNT
export TOKEN=$(gcloud auth application-default print-access-token)
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ
apigee-synchronizer
์๋น์ค ๊ณ์ ์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.gcloud iam service-accounts list --filter "apigee-synchronizer"
apigee-synchronizer$ORG_NAME.iam.gserviceaccount.com
ํจํด๊ณผ ์ผ์นํ๋ฉด ๋ค์ ๋จ๊ณ์์ ์ด ํจํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ๋ค์ ๋ช
๋ น์ด๋ก setSyncAuthorization API๋ฅผ ํธ์ถํ์ฌ ๋๊ธฐํ ๋ด๋น์์ ํ์ํ ๊ถํ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME:setSyncAuthorization" \ -d '{"identities":["'"serviceAccount:apigee-synchronizer@$ORG_NAME.iam.gserviceaccount.com"'"]}'
๊ฐ ํญ๋ชฉ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ORG_NAME
: ํ์ด๋ธ๋ฆฌ๋ ์กฐ์ง์ ์ด๋ฆ์ ๋๋ค.apigee-synchronizer$ORG_NAME.iam.gserviceaccount.com
: apigee-syncnronizer ์๋น์ค ๊ณ์ ์ ์ด๋ฉ์ผ ์ฃผ์์ ๋๋ค.
- ์๋น์ค ๊ณ์ ์ด ์ค์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ก API๋ฅผ ํธ์ถํ์ฌ ์๋น์ค ๊ณ์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME:getSyncAuthorization" \ -d ''
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
{ "identities":[ "serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com" ], "etag":"BwWJgyS8I4w=" }
ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ ์ ์ฉ
๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ Apigee Hybrid๋ฅผ ์ค์นํฉ๋๋ค.
- ํ์ฌ ์์น๊ฐ
hybrid-base-directory/hybrid-files
๋๋ ํฐ๋ฆฌ์ธ์ง ํ์ธํฉ๋๋ค. - ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ
kubectl
์ด ์ฌ๋ฐ๋ฅธ ์ปจํ ์คํธ๋ก ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค. ํ์ฌ ์ปจํ ์คํธ๋ฅผ Apigee Hybrid๋ฅผ ๋ฐฐํฌํ๋ ํด๋ฌ์คํฐ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.kubectl config get-contexts
- ํ
์คํธ ์คํ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
--dry-run
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌinit
๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค. ํ ์คํธ ์คํ์ ์ํํ๋ฉด ํด๋ฌ์คํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.ํ์ด๋ธ๋ฆฌ๋ ๋ฒ์ 1.3์์
--dry-run
ํ๋๊ทธ ๋ฌธ๋ฒ์ ์คํ ์ค์ธkubectl
๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌkubectl
๋ฒ์ ์ ํ์ธํฉ๋๋ค.kubectl version
kubectl
๋ฒ์ 1.17 ์ดํ:$APIGEECTL_HOME/apigeectl init -f overrides/overrides.yaml --dry-run=true
kubectl
๋ฒ์ 1.18 ์ด์:$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 istio-system
ํฌ๋๊ฐ ์ค๋น๋๋ฉด ๋ค์ ๋จ๊ณ๋ก ์ด๋ํฉ๋๋ค.
- ํ
์คํธ ์คํ์ ์ค์นํฉ๋๋ค.
--dry-run
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌapply
๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.kubectl
๋ฒ์ 1.17 ์ดํ:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --dry-run=true
kubectl
๋ฒ์ 1.18 ์ด์:$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
ํฌ๋๊ฐ ๋ชจ๋ ์ค๋น๋ ๋๊น์ง ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. pod๊ฐ ์์๋๋ ๋ฐ ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
Apigee Connect ์ฌ์ฉ ์ค์
Apigee Connect๋ ๋ฐํ์ ์์ญ์ Apigee ๊ด๋ฆฌ ์์ญ๊ณผ MART ๊ฐ์ ํต์ ์ ๊ด๋ฆฌํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Apigee Connect ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
Apigee Connect๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
-
๋ค์ ์์์ ๊ฐ์ด ๋ช ๋ น์ค์์
gcloud
์ธ์ฆ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.TOKEN=$(gcloud auth print-access-token)
ํ ํฐ์ด ์ ๋ ฅ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ์์์ ๊ฐ์ด
echo
๋ฅผ ์ฌ์ฉํฉ๋๋ค.echo $TOKEN
๊ทธ๋ฌ๋ฉด ํ ํฐ์ด ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด๋ก ํ์๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์ gcloud ๋ช ๋ น์ค ๋๊ตฌ ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ง์ Apigee Connect๊ฐ ์ฌ์ฉ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
์ฌ๊ธฐ์ $ORG_NAME์ ์กฐ์ง์ ID์ ๋๋ค.
์ถ๋ ฅ์ ๋ค์์ด ํฌํจ๋๋ฉด
"name" : "features.mart.connect.enabled", "value" : "true"
Apigee Connect๊ฐ ์ฌ์ฉ ์ค์ ๋์์ผ๋ฉฐ ์ด ์น์ ์ ๋๋จธ์ง ๋ถ๋ถ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Apigee Connect๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
curl -H "Authorization: Bearer $TOKEN" -X PUT \ -H "Content-Type: application/json" \ -d '{ "name" : "'"$ORG_NAME"'", "properties" : { "property" : [ { "name" : "features.hybrid.enabled", "value" : "true" }, { "name" : "features.mart.connect.enabled", "value" : "true" } ] } }' \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
์ถ๋ ฅ์ ๋ค์ ์์ฑ์ด ํฌํจ๋์ด ์์ผ๋ฉด Apigee Connect๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉ ์ค์ ๋ ๊ฒ์ ๋๋ค.
{ "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" }
์ถ๋ ฅ์ด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
{ "name": "hybrid-example-2", "createdAt": "1594409699772", "lastModifiedAt": "1594776283697", "environments": [ "example-env" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "analyticsRegion": "us-central1", "runtimeType": "HYBRID", "subscriptionType": "TRIAL" }