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

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

次の手順で 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 上の Apigee ハイブリッド インストールでは、Google Cloud でハイブリッド ランタイム コンポーネントを認証するために Workload Identity と呼ばれるオプションを使用できます。

Google Cloud サービス アカウントと Kubernetes サービス アカウント

Google Cloud サービス アカウントは特別なタイプのアカウントで、サービス アカウント自体として認証することで、承認済みの API 呼び出しを行うことができます。Google Cloud サービス アカウントには、個々のユーザーと同様にロールと権限を付与できます。アプリケーションがサービス アカウントとして認証されると、アプリケーションはサービス アカウントにアクセス権が付与されているすべてのリソースにアクセスできます。Google Cloud サービス アカウントの詳細については、サービス アカウントの概要をご覧ください。

ステップ 4: サービス アカウントを作成するで、Apigee ハイブリッド インストール用に Google Cloud サービス アカウントを作成しました。Apigee は、これらのサービス アカウントを使用してハイブリッド コンポーネントを認証します。

Kubernetes サービス アカウントは Google Cloud サービス アカウントに似ています。Kubernetes サービス アカウントは Pod で実行されるプロセスの ID を提供し、ユーザーと同様に API サーバーに対して認証できるようにします。Kubernetes サービス アカウントの詳細については、Configure Service Accounts for Pods をご覧ください。

Apigee ハイブリッドに必要な Kubernetes サービス アカウントのほとんどは、apigeectl ツールによって作成済みです(前の手順で apigeectl apply を実行したとき)。

GKE で Workload Identity を構成する場合は、Google Cloud サービス アカウントを Kubernetes クラスタ内の Kubernetes サービス アカウントに関連付けます。これにより、Kubernetes サービス アカウントは Google Cloud サービス アカウントの権限を借用し、割り当てられたロールと権限を使用してハイブリッド コンポーネントを認証できます。

プロジェクトの Workload Identity を構成する手順は次のとおりです。

Workload Identity の構成を準備する

以降の手順では、次の環境変数を使用します。定義されていることを確認し、定義されていないものを定義してください。

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. 次のコマンドを使用して、Google Cloud プロジェクト ID に設定されている現在の gcloud 構成を確認します。
    gcloud config get project
  2. 必要に応じて、現在の gcloud 構成を設定します。

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

    出力は次のようになります。

      ---
      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
  5. 次のコマンドを使用して、各ノードプールで 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 という名前になっています。

  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
        
  7. プロジェクト用の Google Cloud サービス アカウントの名前のリストを取得します。これらの名前は、Kubernetes サービス アカウントを関連付けて Workload Identity を構成するために必要になります。非本番環境のインストールで必要な Google Cloud サービス アカウントは 1 つだけです。本番環境のインストールでは 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
    
  8. Kubernetes サービス アカウントの名前のリストを取得します。このリストにある名前を、後で Google Cloud サービス アカウントに関連付ける必要があります。次のコマンドを使用してください。
    kubectl get sa -n $NAMESPACE

    出力は次のようになります。太字の Kubernetes サービス アカウントを Google Cloud サービス アカウントに関連付ける必要があります。

    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
        

Workload Identity を構成する

ハイブリッド インストールで Workload Identity を有効にするには、次の手順を実施します。

  1. Apigee コンポーネントごとに、そのコンポーネントの Google Cloud サービス アカウントに対応する 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 コンポーネント用に Workload Identity を構成します。

      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

      非本番環境

      Kubernetes サービス アカウント apigee-cassandra-backup を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-restore を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-schema-setup を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-schema-val を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-user-setup を構成する

      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

      Kubernetes サービス アカウント apigee-datastore-default-sa を構成する

      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

      本番環境

      Kubernetes サービス アカウント apigee-cassandra-backup を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-restore を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-schema-setup を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-schema-val を構成する

      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

      Kubernetes サービス アカウント apigee-cassandra-user-setup を構成する

      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

      Kubernetes サービス アカウント apigee-datastore-default-sa を構成する

      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

      Apigee Connect コンポーネント用に Workload Identity を構成します。

      非本番環境

      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

      MART コンポーネント用に Workload Identity を構成します。

      非本番環境

      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 指標

      Apigee 指標コンポーネント用に Workload Identity を構成します。

      非本番環境

      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 コンポーネント用に Workload Identity を構成します。

      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

      Apigee Watcher コンポーネント用に Workload Identity を構成します。

      非本番環境

      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
    • ランタイム

      Apigee ランタイム コンポーネント用に Workload Identity を構成します。

      非本番環境

      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

      Synchronizer コンポーネント用に Workload Identity を構成します。

      非本番環境

      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(環境レベル)

      環境レベルの UDCA コンポーネント用に Workload Identity を構成します。

      非本番環境

      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
  2. 省略可: ダウンロードしたサービス アカウント キーファイルをすべて削除します。

    create-service-account ツールを使用して Google サービス アカウントを作成した場合は、サービス アカウント キーが作成され、.json キーファイルがダウンロードされている可能性があります。GKE で Workload Identity を使用する場合、これらのキーファイルは不要です。

    キーファイルは次のコマンドで削除できます。

    rm $HYBRID_FILES/service-accounts/*.json

Workload Identity を確認する

  1. (省略可)Kubernetes サービス アカウントのステータスを、Google Cloud コンソールの [Kubernetes: ワークロードの概要] ページで確認できます。

    [ワークロード] に移動

  2. apigeectl check-ready を使用してデプロイのステータスを再度確認するには:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml

次のステップ

1 2 3 4 5 6 7 8 9 (次)ステップ 10: Apigee ingress を公開する 11