Google Cloud 上の GKE クラスタを登録する場合は、クラスタを登録する前に、選択した登録オプションに応じて次のことを行う必要があります。このガイドは、クラスタ登録の一般的な前提条件をすでに完了していることを前提としています。
GKE Workload Identity を有効にする
フリートの Workload Identity を有効にした GKE クラスタを登録することをおすすめします。これにより、クラスタ上のアプリケーションが Google Cloud API とサービスに対して一貫した認証を行うことができます。フリートの Workload Identity を有効にする利点については、フリートの Workload Identity を使用するをご覧ください。
この機能を使用するには、登録前にクラスタで GKE Workload Identity が有効になっていることを確認する必要があります。GKE Workload Identity をクラスタで有効にせずにフリートの Workload Identity を使用して GKE クラスタを登録することは、ワークロードがクラスタ内で ID を表明する方法に一貫性がなくなるため、サポートされる構成ではありません。Autopilot クラスタでは、Workload Identity がデフォルトで有効になっています。
gcloud
GKE クラスタで Workload Identity が有効になっているかどうかを確認するには、次のコマンドを実行してクラスタの Workload Identity プールを一覧表示します。gcloud
のデフォルト ゾーンまたはデフォルト リージョンをまだ指定していない場合は、このコマンドの実行時に --region
フラグまたは --zone
フラグも指定する必要になる場合があります。
gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"
以下を置き換えます。
- CLUSTER_NAME: GKE クラスタの
name
。
次のような結果が表示された場合は、Workload Identity はすでに GKE クラスタで有効になっています。
GKE_PROJECT_ID.svc.id.goog
結果がない場合は、Workload Identity は有効になりません。Workload Identity を有効にするには、Workload Identity の有効化の手順に従います。
コンソール
GKE クラスタで Workload Identity が有効になっているかどうかを確認するには:
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、クラスタの名前をクリックします。
クラスタの詳細ページの [セキュリティ] セクションで、[ワークロード ID] が [有効] になっていることを確認します。
Workload Identity が無効になっていて、この機能を有効にする場合:
- クラスタの詳細ページで、[ ワークロード ID を編集] をクリックします。
- [Workload Identity の編集] ダイアログで、[Workload Identity を有効にする] チェックボックスをオンにします。
- [Save changes](変更を保存)をクリックします。
クラスタを別のプロジェクトに登録する権限を付与する
独自のプロジェクトで GKE クラスタをフリートに登録する場合、アクセス権限の付与で説明されている以外の特別な権限は必要ありません。ただし、独自のプロジェクト(GKE_PROJECT)から別のプロジェクト(FLEET_HOST_PROJECT)のフリートに GKE クラスタを登録する場合、FLEET_HOST_PROJECT サービス エージェント アカウント gcp-sa-gkehub
には、GKE_PROJECT プロジェクトで gkehub.serviceAgent
ロールが必要です。サービス アカウントには、このロールによって、そのプロジェクトのクラスタ リソースを管理する権限が付与されます。
フリートホスト プロジェクトの gcp-sa-gkehub
サービス アカウントにクラスタのプロジェクトで必要なロールがあるかどうかは、次のように、gcloud CLI または Google Cloud コンソールを使用して確認できます。
gcloud
次のコマンドを実行します。
gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub
GKE_PROJECT_ID は、クラスタのプロジェクトの ID です。
フリート ホスト プロジェクト gcp-sa-gkehub
にクラスタのプロジェクトに必要なロールがある場合は、service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
の形式で出力に表示されます。次に例を示します。
- members:
- serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
role: roles/gkehub.serviceAgent
コンソール
クラスタのプロジェクトを選択した状態で、Google Cloud コンソールの [IAM と管理] ページに移動します。
[Google 提供のロール付与を含みます] チェックボックスをオンにして、サービス エージェントを含む全ポリシーを表示します。
フリートホスト プロジェクトの gcp-sa-gkehub
サービス アカウントにクラスタのプロジェクトで必要なロールがある場合、このリストが service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
の形式で表示されます。
プロジェクトの IAM ポリシーにサービス エージェントが表示されない場合は、次の手順で必要な権限を更新します。
gcloud
gcp-sa-gkehub
にgkehub.serviceAgent
ロールを付与するには、まずこのサービス アカウントがフリートホスト プロジェクトに存在することを確認します。以前にこのフリート プロジェクトにクラスタを登録したことがある場合、このサービス アカウントはすでに存在します。フリート ホスト プロジェクトの IAM ポリシーで確認できます。gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
gcp-sa-gkehub
サービス アカウントを作成する必要がある場合は、次のコマンドを実行します。gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
このコマンドを実行すると、次の内容が出力されます。
Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
次のコマンドを実行して、両方のプロジェクトの
roles/gkehub.serviceAgent
ロールとクラスタのプロジェクトのroles/gkehub.crossProjectServiceAgent
をサービス アカウントに付与します。GKE_PROJECT_ID=GKE_PROJECT_ID FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)") gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.crossProjectServiceAgent
ここで
- GKE_PROJECT_ID は、GKE クラスタの Google Cloud プロジェクト ID です。
- FLEET_HOST_PROJECT_ID は、クラスタを登録する Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。
ロール バインディングが付与されていることを確認するには、次のコマンドを再度実行します。
gcloud projects get-iam-policy GKE_PROJECT_ID
サービス アカウント名と
gkehub.serviceAgent
およびgkehub.crossProjectServiceAgent
ロールが表示されている場合、ロール バインディングが付与されています。次に例を示します。- members: - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.serviceAgent - members: - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.crossProjectServiceAgent
Terraform 用のサービス アカウントを構成する
Terraform を使用して Google Kubernetes Engine クラスタを登録する場合は、Terraform が Fleet API にアクセスしてメンバーシップを作成するために使用できるサービス アカウントを作成する必要があります。
gcloud
次のコマンドでサービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
Terraform を Fleet API で使用できるようにするために、サービス アカウントに
gkehub.admin
IAM ロールをバインドします。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.admin"
Terraform で新しいクラスタを作成して登録する場合は、Terraform がこのサービス アカウントを使用して GKE API にアクセスしてクラスタを作成できるように、サービス アカウントに
roles/container.admin
ロールをバインドする必要があります。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/container.admin"
以下を置き換えます。
- FLEET_HOST_PROJECT_ID は、クラスタを登録する Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。
- SERVICE_ACCOUNT_NAME は、[サービス アカウント] に付ける表示名です。
gcloud
を使用して Google Cloud サービス アカウントを作成するの説明に沿って、サービス アカウントの秘密鍵 JSON ファイルをダウンロードします。このファイルは、Terraform を使用してクラスタを作成および登録するために必要です。
Config Connector 用のサービス アカウントを構成する
Config Connector を使用して GKE クラスタを登録する場合は、次のようにします。
gcloud
Config Connector アドオンがインストールされていることを確認します。Config Connector のバージョンが 1.47.0 以降である必要があります。
Config Connector の手順に沿って、サービス アカウントを作成します。
Config Connector がこのサービス アカウントを使用して Fleet API にアクセスできるように、
gkehub.admin
IAM ロールをサービス アカウントに付与します。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.admin"
Config Connector で新しいクラスタを作成して登録する場合は、
roles/container.admin
ロールをサービス アカウントにバインドすることで、Config Connector コントローラがこのサービス アカウントを使用して GKE API にアクセスし、クラスタを作成できるようにする必要もあります。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/container.admin"
以下を置き換えます。
- FLEET_HOST_PROJECT_ID は、クラスタを登録する Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。
- SERVICE_ACCOUNT_NAME は、[サービス アカウント] に付ける表示名です。
このサービス アカウントを使用し、Config Connector の手順に沿って Config Connector を構成します。
次のステップ
手順に沿ってクラスタを登録します。