ステップ 8: ハイブリッド ランタイムをインストールする

クラスタに構成を適用する

次の手順で Apigee ハイブリッドをクラスタにインストールします。

  1. 現在のディレクトリが hybrid-base-directory/hybrid-files ディレクトリであることを確認します。
    cd $HYBRID_FILES
  2. 次のコマンドを使用して、kubectl が正しいコンテキストに設定されていることを確認します。現在のコンテキストは、Apigee ハイブリッドをデプロイするクラスタに設定する必要があります。
    kubectl config current-context

    結果に、Apigee ハイブリッドをデプロイするクラスタの名前が含まれている必要があります。たとえば、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 on bare metalAWS on GKEEKSGKE 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 Deployment Controller と Apigee Admission Webhook がインストールされます。

  6. デプロイのステータスを確認するには、次のコマンドを使用します。
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    kubectl get pods -n apigee-system
    kubectl get pods -n apigee

    Pod の準備ができたら、次のステップに進みます。

  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

    Pod の準備がすべて整うまで、この手順を繰り返します。Pod の起動には数分かかることがあります。

GKE での Workload Identity の使用

GKE で Workload Identity を使用している場合は、次の手順に沿って、apigeectl によって作成された Kubernetes サービス アカウントを、ステップ 4: サービス アカウントと認証情報を作成するで作成した Google サービス アカウントに関連付けます。

この手順では、次の環境変数を使用します。これらの変数をコマンドシェルに設定するか、コードサンプル内の値を実際の値に置き換えます。

  • APIGEECTL_HOME: apigeectl をインストールしたディレクトリ。
  • CLUSTER_LOCATION: クラスタのリージョンまたはゾーン(例: us-west1)。
  • CLUSTER_LOCATION: クラスタの名前。
  • ENV_NAME: Apigee 環境の名前。
  • NAMESPACE: Apigee Namespace。デフォルトは 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 ハイブリッドを実行するときには、通常、各サービス アカウントの秘密鍵(.json ファイル)を作成してダウンロードします。Workload Identity を使用する場合、サービス アカウントの秘密鍵をダウンロードして 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. Kubernetes サービス アカウント apigee-cassandra-restore を作成します。

    apigeectl apply を実行して構成を適用したときに、Workload Identity に必要なほとんどの Kubernetes サービス アカウントが作成されています。

    Kubernetes サービス アカウント apigee-cassandra-restore を作成するには、--restore フラグを指定して apigeectl apply を実行します。

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  5. GKE クラスタで Workload Identity が有効になっていることを確認します。ステップ 1: クラスタを作成するでクラスタを作成したとき、ステップ 6 で Workload Identity を有効にしました。次のコマンドを実行して、Workload Identity が有効になっているかどうかを確認できます。

    リージョン クラスタ

    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'

    クラスタで Workload Identity が有効になっている場合、出力は次のようになります。

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    結果に null が表示された場合は、次のコマンドを実行してクラスタの Workload Identity を有効にします。

    リージョン クラスタ

    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. 次のコマンドを使用して、ノードプールで Workload Identity が有効になっていることを確認します。

    リージョン クラスタ

    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: の行が含まれていない場合は、次のコマンドを使用して、各ノードプールに対して Workload Identity を有効にします。この処理に 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 ハイブリッド インストールでは、2 つのデフォルト ノードプールは 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 コンポーネントごとに、そのコンポーネントの Google サービス アカウントで、対応する Kubernetes サービス アカウントにアノテーションを付けます。

    次の手順では、2 つの環境変数を使用します。各コマンドセットを実行する前に、これらの変数の値をリセットします。

    • 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-valval は検証(validation)の意味)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      非本番環境

      次の手順では、2 つの環境変数を使用します。各コマンドセットを実行する前に、これらの変数の値をリセットします。

      • 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 には、スコープごとに 1 つずつ、合わせて 2 つの Kubernetes サービス アカウントがあります。この 2 つのサービス アカウントは名前で区別できます。環境スコープのサービス アカウントの名前には環境名が含まれます。次に例を示します。

      • 組織レベル: 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
    • Synchronizer

      非本番環境

      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. (省略可)Kubernetes サービス アカウントのステータスは、Google Cloud コンソールの [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 Ingress を公開する 10