8단계: 하이브리드 런타임 설치

클러스터에 구성 적용

다음 단계를 따라 클러스터에 Apigee Hybrid를 설치합니다.

  1. 현재 위치가 hybrid-base-directory/hybrid-files 디렉터리인지 확인합니다.
    cd $HYBRID_FILES
  2. 다음 명령어를 사용하여 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
  3. 베어메탈용 Anthos, AWS on GKE, EKS, GKE On-Prem 플랫폼의 경우 다음 명령어를 통해 KUBECONFIG 변수가 설정되었는지 확인합니다.
    echo ${KUBECONFIG}
  4. 테스트 실행를 초기화합니다. 테스트 실행을 수행하면 클러스터를 변경하기 전에 오류를 확인할 수 있습니다. 다음과 같이 --dry-run 플래그를 사용하여 init 명령어를 실행합니다.
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
  5. 오류가 없으면 다음과 같이 init 명령어를 실행합니다.
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml

    init 명령어는 Apigee 배포 서비스 Apigee 배포 컨트롤러와 Apigee 허용 웹훅을 설치합니다.

  6. 배포 상태를 확인하려면 다음 명령어를 사용하면 됩니다.
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    kubectl get pods -n apigee-system
    kubectl get pods -n apigee

    포드가 준비되면 다음 단계로 이동합니다.

  7. 테스트 실행을 설치합니다. --dry-run 플래그를 사용하여 apply 명령어를 실행합니다.
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
  8. 오류가 없으면 다음 명령어를 사용하여 클러스터에 Apigee별 런타임 구성요소를 적용할 수 있습니다.
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
  9. 배포 상태를 확인하기 위해 다음 명령어를 실행하세요.
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml

    포드가 모두 준비될 때까지 이 단계를 반복합니다. 포드가 시작되는 데 몇 분 정도 걸릴 수 있습니다.

워크로드 아이덴티티가 있는 GKE

GKE에서 워크로드 아이덴티티를 사용하는 경우 다음 안내를 따라 apigeectl에서 생성된 Kubernetes 서비스 계정을 4단계: 서비스 계정 및 사용자 인증 정보 만들기에서 생성한 Google 서비스 계정과 연결합니다.

이 절차에서는 다음 환경 변수를 사용합니다. 명령어 셸에서 이들을 설정하거나 코드 샘플에서 실제 값으로 바꿉니다.

  • APIGEECTL_HOME: apigeectl을 설치한 디렉터리
  • CLUSTER_LOCATION: 클러스터의 리전 또는 영역(예: us-west1)
  • CLUSTER_LOCATION: 클러스터 이름입니다.
  • ENV_NAME: Apigee 환경의 이름
  • NAMESPACE: Apigee 네임스페이스. 기본적으로 apigee입니다.
  • HYBRID_FILES: 하이브리드 파일 디렉터리(예: hybrid-base-directory/hybrid-files)
  • ORG_NAME: Apigee 조직의 이름
  • PROJECT_ID: Google Cloud 프로젝트의 ID

환경 변수 확인:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $ORG_NAME
echo $PROJECT_ID

필요한 변수 초기화:

export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export CLUSTER_LOCATION=my-cluster-location
export ENV_NAME=my-environment-name
export HYBRID_FILES=hybrid-base-directory/hybrid-files
export NAMESPACE=apigee
export ORG_NAME=$PROJECT_ID
export PROJECT_ID=my-project-id
  1. 선택사항: 서비스 계정 키 파일을 삭제합니다.

    GKE에서 Apigee Hybrid를 실행할 때 표준 방식은 각 서비스 계정의 비공개 키(.json 파일)를 만들고 다운로드하는 것입니다. 워크로드 아이덴티티를 사용할 때는 서비스 계정 비공개 키를 다운로드하고 GKE 클러스터에 추가할 필요가 없습니다.

    다음 명령어를 사용하여 키 파일을 삭제할 수 있습니다.

    rm $HYBRID_FILES/service-accounts/*.json
  2. 다음 명령어를 사용하여 Google Cloud 프로젝트 ID에 대한 현재 gcloud 구성을 확인합니다.
    gcloud config get project
  3. 필요한 경우 현재 gcloud 구성을 설정합니다.

    gcloud config set project $PROJECT_ID
  4. 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
  5. 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
  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
        

    출력에 workloadMetadataConfig: 행이 포함되어 있지 않으면 다음 명령어를 사용하여 각 노드 풀에 워크로드 아이덴티티를 사용 설정합니다. 이 작업은 최대 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-dataapigee-runtime입니다.

  7. 다음 명령어를 사용하여 프로젝트의 Google 서비스 계정의 이름을 확인합니다.
    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
    
  8. 다음 명령어를 사용하여 서비스 계정을 확인합니다.
    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
        
  9. 각 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)입니다.
    • 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

      비프로덕션

      다음 단계에서는 두 가지 환경 변수를 사용합니다. 각 명령어 집합 전에 이러한 변수의 값을 재설정합니다.

      • GSA_NAME: Google 서비스 계정의 이름입니다. 4단계: 서비스 계정 만들기에서 create-service-account 도구로 만든 서비스 계정입니다.
      • KSA_NAME: Kubernetes 서비스 계정의 이름입니다. kubectl get sa -n $NAMESPACE 명령어를 사용하여 위에 나열한 계정입니다.

      apigee-cassandra-backup Kubernetes 서비스 계정

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        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 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-restore"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-schema-setup Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-schema-val Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        예를 들면 다음과 같습니다. apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-user-setup Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-datastore-default-sa Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      apigee-cassandra-backup Kubernetes 서비스 계정

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. 출력에 다음과 비슷하게 주석을 설명하는 줄이 있어야 합니다.

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-restore Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-restore"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        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 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-schema-val Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        예를 들면 다음과 같습니다. apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-cassandra-user-setup Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      apigee-datastore-default-sa Kubernetes 서비스 계정

      1. KSA_NAME 환경 변수를 재정의합니다.

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-mart-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-mart-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-mart-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee 측정항목

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-metrics-sa"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • 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는 환경 이름입니다.

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-udca-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-udca-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-udca-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-watcher-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-watcher-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-watcher-hybrid-example-project-123abcd-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • 런타임

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • 동기화 담당자

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA(환경 수준)

      비프로덕션

      1. KSA_NAME 환경 변수를 정의합니다.

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      프로덕션

      1. KSA_NAMEGSA_NAME 환경 변수를 정의합니다.

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        예를 들면 다음과 같습니다. apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. 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
      3. 서비스 계정에 주석을 추가합니다.
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 주석을 확인합니다.
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  10. (선택사항) Google Cloud 콘솔의 Kubernetes: 워크로드 개요 페이지에서 Kubernetes 서비스 계정의 상태를 확인할 수 있습니다.

    워크로드로 이동

  11. apigeectl check-ready로 배포 상태를 다시 확인하려면 다음을 수행하세요.
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml

다음 단계

1 2 3 4 5 6 7 8 (다음) 9단계: Apigee 인그레스 노출 10