GKE์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ์‚ฌ์šฉ ์„ค์ •

์ด ์ฃผ์ œ์—์„œ๋Š” GKE์—์„œ Apigee Hybrid์˜ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Apigee Hybrid AKS ๋˜๋Š” EKS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ AKS ๋ฐ EKS์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ์ œํœด ์‚ฌ์šฉ ์„ค์ •์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

๊ฐœ์š”

์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋Š” GKE(Google Kubernetes Engine) ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Google Cloud ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ์˜ ๊ฐœ์š”๋Š” ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Google Cloud IAM ์„œ๋น„์Šค ๊ณ„์ •์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Google API์— ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ID์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ๊ณ„์ •์„ GSA(Google ์„œ๋น„์Šค ๊ณ„์ •)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. GSA์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด์™€ ๋ณ„๋„๋กœ Kubernetes์—๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๊ฐœ๋…๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์€ ํฌ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ID๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Kubernetes ์„œ๋น„์Šค ๊ณ„์ •์€ Kubernetes ๋ฆฌ์†Œ์Šค์ด๊ณ  Google ์„œ๋น„์Šค ๊ณ„์ •์€ Google Cloud์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. Kubernetes ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ์˜ ํฌ๋“œ์˜ ์„œ๋น„์Šค ๊ณ„์ • ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Apigee๋Š” ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ ์œ ํ˜•์— ๋Œ€ํ•ด Helm ์ฐจํŠธ๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•  ๋•Œ Kubernetes ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ Kubernetes ์„œ๋น„์Šค ๊ณ„์ •๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ˆ์ฐจ์—์„œ ์‚ฌ์šฉ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์–ด ์…ธ์—์„œ ์ด๋“ค์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ ์ƒ˜ํ”Œ์—์„œ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • CLUSTER_LOCATION: Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์ „ ๋˜๋Š” ์˜์—ญ(์˜ˆ: us-west1)
  • CLUSTER_NAME: ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ENV_NAME: Apigee ํ™˜๊ฒฝ์˜ ์ด๋ฆ„
  • ORG_NAME: Apigee ์กฐ์ง์˜ ์ด๋ฆ„
  • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID
  • NAMESPACE: Apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค(์ผ๋ฐ˜์ ์œผ๋กœ 'apigee')

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME

ํ•„์š”ํ•œ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export CLUSTER_NAME=hybrid-base-directory/apigeectl

์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๋ฐ ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค ํŒŒ์ผ

GKE์—์„œ Apigee Hybrid๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ‘œ์ค€ ๋ฐฉ์‹์€ ๊ฐ ์„œ๋น„์Šค ๊ณ„์ •์˜ ๋น„๊ณต๊ฐœ ํ‚ค(.json ํŒŒ์ผ)๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  GKE ํด๋Ÿฌ์Šคํ„ฐ์— ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Apigee Hybrid ์„ค์น˜์˜ ์ผ๋ถ€๋กœ ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ๊ฒฝ์šฐ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ํ›„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์„ค์น˜์—์„œ๋Š” ๊ฐ ๊ตฌ์„ฑ์š”์†Œ ์ฐจํŠธ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Apigee Hybrid์šฉ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ์‚ฌ์šฉ ์„ค์ •

์•ˆ๋‚ด์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋œ ์„ค์น˜ ๋ฐ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ

Apigee Hybrid Helm ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ apigeectl ๊ด€๋ฆฌ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๊ฒฝ์šฐ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ์žฌ์ •์˜ ๊ตฌ๋ฌธ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฌ์ •์˜ ํŒŒ์ผ์—์„œ ๋‹ค์Œ ์†์„ฑ์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • namespace ํ•„๋“œ๋Š” ํ•„์ˆ˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    instanceID: "hybrid-instance-1"
    namespace: "apigee"
    
  • gcp.workloadIdentity.enabled ์†์„ฑ์€ gcp.workloadIdentityEnabled ์†์„ฑ์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    gcp:
      workloadIdentity:
        enabled: true
  • ํ”„๋กœ๋•์…˜ ์„ค์น˜์˜ ๊ฒฝ์šฐ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ์— gsa ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ ๊ฐ’์€ ํ•ด๋‹น ๊ตฌ์„ฑ์š”์†Œ์˜ Google IAM ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    watcher
      gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • ๋น„ํ”„๋กœ๋•์…˜ ์„ค์น˜์˜ ๊ฒฝ์šฐ gcp.workloadIdentity.gsa ์†์„ฑ์— ๋‹จ์ผ GSA๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    gcp
      workloadIdentity
        gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Apigee Hybrid์šฉ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ์˜ ํ”„๋กœ๋•์…˜ ๋ฐ ๋น„ํ”„๋กœ๋•์…˜ GSA๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. gcp.workloadIdentity.gsa ์†์„ฑ์— ๋‹จ์ผ ํ•ญ๋ชฉ์„ ์ง€์ •ํ•˜๊ณ  ํŠน์ • ๊ตฌ์„ฑ์š”์†Œ์— ๊ฐœ๋ณ„ GSA๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•œ ์ œ๊ณต ๊ฐ’์€ gcp.workloadIdentity.gsa์— ๋Œ€ํ•œ ์ œ๊ณต ๊ฐ’์˜ ํ•ด๋‹น ๊ตฌ์„ฑ์š”์†Œ๋งŒ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ตฌ์„ฑ ์ค€๋น„

  1. ์žฌ์ •์˜ ํŒŒ์ผ์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์žฌ์ •์˜ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค์Œ ๊ตฌ์„ฑ ์†์„ฑ์— ๋Œ€ํ•œ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ gcloud ๊ตฌ์„ฑ์ด Google Cloud ํ”„๋กœ์ ํŠธ ID๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    gcloud config get project
  3. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ gcloud ๊ตฌ์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    gcloud config set project $PROJECT_ID
  4. GKE ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 1๋‹จ๊ณ„: ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“  ๊ฒฝ์šฐ 6๋‹จ๊ณ„๋Š” ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ฆฌ์ „ ํด๋Ÿฌ์Šคํ„ฐ

    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
  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ๋…ธ๋“œ ํ’€์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋Œ€ 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์ž…๋‹ˆ๋‹ค.

  6. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋…ธ๋“œ ํ’€์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ๋ฆฌ์ „ ํด๋Ÿฌ์Šคํ„ฐ

    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
      

์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ตฌ์„ฑ

๋‹ค์Œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  • apigee-telemetry
  • apigee-org
  • apigee-env

apigee-datastore, apigee-env, apigee-org, apigee-telemetry ์ฐจํŠธ์— --dry-run ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ helm upgrade๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ GSA ๋ฐ KSA ์ด๋ฆ„์œผ๋กœ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๊ฐ€ ์ถœ๋ ฅ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run
NAME: datastore
...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding  \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
      --project :my-project
  1. apigee-datastore์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ถœ๋ ฅ์—์„œ NOTES: ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  2. apigee-telemetry์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ถœ๋ ฅ์—์„œ NOTES: ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  3. apigee-org์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ถœ๋ ฅ์—์„œ NOTES: ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  4. apigee-env์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ถœ๋ ฅ์—์„œ NOTES: ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run

    ์„ค์น˜์˜ ๊ฐ ํ™˜๊ฒฝ์—์„œ ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ํ™•์ธ

  1. ๋‹จ๊ณ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    gcloud config set project $PROJECT_ID
    
    kubectl run --rm -it --image google/cloud-sdk:slim \
      --namespace $NAMESPACE workload-identity-test\
      -- gcloud auth list

    ๋ช…๋ น์–ด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š์œผ๋ฉด Enter๋ฅผ ๋ˆŒ๋Ÿฌ ๋ณด์„ธ์š”.

    ๋‹จ๊ณ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‘๋‹ต์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
  2. ์ด์ „ ์„ค์น˜์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ๋น„๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  3. ๋กœ๊ทธ ํ™•์ธ:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    
  4. (์„ ํƒ์‚ฌํ•ญ) Google Cloud console์˜ Kubernetes: ์›Œํฌ๋กœ๋“œ ๊ฐœ์š” ํŽ˜์ด์ง€์—์„œ Kubernetes ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์›Œํฌ๋กœ๋“œ๋กœ ์ด๋™