このページでは、Google Cloud の GKE クラスタをフリートに追加する方法について説明します。プロジェクトとユースケースに応じて、登録には、Google Cloud コンソール、Terraform、Config Connector、または Google Cloud CLI を使用できます。
準備
クラスタの登録に関する一般的な前提条件に沿って行っていることを確認します。
ユースケースによっては、GKE クラスタの登録で、以下のことを行う必要が生じる場合もあります。
- フリートの Workload Identity を有効にしたクラスタを登録する場合(推奨)、クラスタで GKE Workload Identity が有効になっていることを確認します。
- 別のプロジェクトのフリートに登録する(クロス プロジェクト登録とも呼ばれる)場合は、必要な権限が設定されていることを確認します。
- パブリック エンドポイント アクセスが無効または承認済みネットワークに限定された限定公開クラスタを登録する場合は、
gcloud
登録コマンドを実行するマシンがクラスタの外部エンドポイントにアクセスできることを確認するか、そのマシンの外部 IP をクラスタの承認済みネットワークに追加します。 - Terraform または Config Connector を使用してクラスタを登録する場合は、ツールに Google Cloud サービス アカウントが設定され、ツールが Google Cloud で認証できるように構成されていることを確認します。
- Google Cloud CLI を使用してクラスタを登録する場合は、Connect Agent が Google Cloud の認証時に使用する ID を設定する必要があります。現在、
gcloud
による登録ではエージェントが必ずインストールされるためです。これは、上記のように Workload Identity にすることも、Google サービス アカウントの作成を選択することもできます。
クラスタの登録
前提条件で確認したとおり、フリートの Workload Identity を有効にした GKE クラスタを登録することをおすすめします。これにより、アプリケーションが Google Cloud API とサービスに対して一貫した認証を行うことができます。フリートの Workload Identity を有効にする利点については、フリートの Workload Identity を使用するをご覧ください。以下のオプションでは、すべて必要に応じてフリートの Workload Identity を有効にできます。
Anthos プラットフォームを有効にしてプロジェクトに GKE クラスタを登録する最も簡単で早い方法は、Google Cloud コンソールの [Anthos クラスタ] ページから登録することです。この方法を使用すると、すぐにクラスタをフリートの一部としてコンソールに表示し、フリート対応機能(Anthos Config Management など)を使用できます
Terraform または Config Connector を使用して、GKE クラスタを作成し登録できます(Anthos プラットフォーム全体は有効でも無効でも構いません)。
Google Cloud CLI を使用して、GKE クラスタを登録できます(Anthos プラットフォーム全体は有効、無効のいずれに設定しても問題ありません)。
GKE クラスタを登録するには、次のようにします。
Console
クラスタを登録するには、次のようにします。
- (省略可)登録済みクラスタでフリートの Workload Identity(推奨)を使用する場合は、クラスタで GKE Workload Identity を有効にします。GKE Workload Identity を備えたクラスタでは、Google Cloud コンソールから登録するときに、フリートの Workload Identity が自動的に有効になります。
Google Cloud コンソールで、Anthos クラスタ ページに移動します。このページには、登録されているすべてのクラスタが表示されます。
[既存のクラスタを登録] をクリックします。
フリートに追加する未登録クラスタの横にある [登録] をクリックします。
Terraform
google-beta
プロバイダを使用する Terraform で GKE クラスタを登録できます。登録の構成に使用する gke_hub_membership
リソースの詳細については、terraform レジストリをご覧ください。
以下の手順を行う前に、前提条件に記載のとおり、Terraform で使用するサービス アカウントが作成されていることを確認してください。
GKE クラスタを登録する
クラスタを登録するには、構成で次のブロックを使用します。
次のスニペットのように、
google-beta
プロバイダを必須プロバイダとして指定します。バージョンは 3.62.0 以降である必要があります。terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "3.67.0" } } }
gke_hub_membership を使用する場合、このプロバイダは必須です。
プロバイダに次のデフォルト値を設定します。
provider "google-beta" { credentials = file("SERVICE_ACCOUNT_KEY_PATH") project = "PROJECT_ID" }
以下を置き換えます。
- SERVICE_ACCOUNT_KEY_PATH: 前提条件の一部としてダウンロードしたサービス アカウントの秘密鍵の JSON ファイルへのローカル ファイルパス。このサービス アカウント キーは、
creds-gcp
という名前のシークレットとしてgke-connect
名前空間に保存されます。このサービス アカウント キーにより、Terraform が Google Cloud アカウントにアクセスできるようになります。 - PROJECT_ID: Terraform リソースをプロビジョニングするために選択するデフォルトのプロジェクト。
- SERVICE_ACCOUNT_KEY_PATH: 前提条件の一部としてダウンロードしたサービス アカウントの秘密鍵の JSON ファイルへのローカル ファイルパス。このサービス アカウント キーは、
GKE クラスタを作成する(省略可)
既存のクラスタを登録する場合は、この手順をスキップします。
resource "google_container_cluster" "TF_CLUSTER_RESOURCE_NAME" { provider = google-beta name = "CLUSTER_NAME" location = "ZONE" initial_node_count = 1 }
以下を置き換えます。
- TF_CLUSTER_RESOURCE_NAME: このブロックによって作成された Terraform
google_container_cluster
リソースを一意に識別するために使用する名前。 - CLUSTER_NAME: 作成したクラスタを一意に表すために使用する名前。
- ZONE: GKE クラスタ リソースをプロビジョニングするために選択するデフォルトのゾーン。例:
us-central1-a
- TF_CLUSTER_RESOURCE_NAME: このブロックによって作成された Terraform
GKE クラスタのメンバーシップを登録します。
resource "google_gke_hub_membership" "TF_MEMBERSHIP_RESOURCE_NAME" { provider = google-beta project = "FLEET_PROJECT_ID" membership_id = "MEMBERSHIP_NAME" endpoint { gke_cluster { resource_link = "//container.googleapis.com/CLUSTER_RESOURCE_NAME" } } }
以下を置き換えます。
- TF_MEMBERSHIP_RESOURCE_NAME: このブロックによって作成された Terraform
google_gke_hub_membership
リソースを一意に識別するために使用する名前。 - FLEET_PROJECT_ID: 設定しない場合、クラスタのメンバーシップは、前に指定したデフォルト プロジェクト(PROJECT_ID)に作成されます。GKE クラスタを別のプロジェクトのフリートに登録する場合は、このフィールドを設定します。
- MEMBERSHIP_NAME: フリート内のクラスタを一意に表すように選択したメンバーシップ名。
- CLUSTER_RESOURCE_NAME: GKE クラスタの Google Cloud リソース名。例:
projects/my-project/zones/us-west1-a/clusters/my-cluster
。クラスタに Terraform がプロビジョニングされている場合、これは${google_container_cluster.TF_CLUSTER_RESOURCE_NAME.id}
です。
- TF_MEMBERSHIP_RESOURCE_NAME: このブロックによって作成された Terraform
登録済みの GKE クラスタで Workload Identity を有効にする
Workload Identity を有効にする場合、クラスタの登録と同じ構成を使用しますが、次の追加手順が適用されます。
関連する
google_container_cluster
リソース ブロックに以下を追加して、GKE Workload Identity を有効にします。これは、新しいクラスタと既存のクラスタの両方で行う必要があります。workload_identity_config { identity_namespace = "PROJECT_ID.svc.id.goog" }
以下を置き換えます。
- PROJECT_ID: Terraform リソースをプロビジョニングするために選択するデフォルトのプロジェクト。
関連する
google_gke_hub_membership
リソース ブロックに以下を追加して、Fleet Workload Identity を有効にします。authority { issuer = "https://container.googleapis.com/v1/CLUSTER_RESOURCE_NAME" }
以下を置き換えます。
- CLUSTER_RESOURCE_NAME: GKE クラスタの Google Cloud リソース。例:
projects/my-project/zones/us-west1-a/clusters/my-cluster
。クラスタに Terraform がプロビジョニングされている場合、これは${google_container_cluster.TF_CLUSTER_RESOURCE_NAME.id}
です。
- CLUSTER_RESOURCE_NAME: GKE クラスタの Google Cloud リソース。例:
Config Connector
Config Connector アドオンがインストールされている場合は、Config Connector を使用して GKE クラスタを登録できます。Config Connector のバージョンが 1.47.0 以降であることと、前提条件に記載のとおり、サービス アカウントが作成されていることを確認してください。
GKEHubMembership
リソースの完全なリファレンスについては、Config Connector リファレンスをご覧ください。
GKE クラスタを登録する
クラスタを登録するには、まず Config Connector ガイドの手順に沿って、リソースを作成する場所を指定します。つづいて、以下のように、YAML ファイルを作成して登録し、必要に応じてクラスタを作成します。
GKE クラスタの作成と登録
次の簡単な例に示すように、GKE クラスタを作成します。
apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: name: CLUSTER_NAME spec: location: LOCATION initialNodeCount: 1
以下を置き換えます。
- CLUSTER_NAME: Config Connector で作成したクラスタを一意に表すために使用する名前。
- LOCATION: GKE クラスタ リソースのプロビジョニングに選択したゾーンまたはリージョン。例:
us-central1-a
Config Connector を使用して GKE クラスタを作成する際のオプションの一覧については、Config Connector のドキュメントをご覧ください。
GKE クラスタのメンバーシップを登録します。
apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubMembership metadata: name: MEMBERSHIP_NAME spec: location: global endpoint: gkeCluster: resourceRef: name: CLUSTER_NAME
以下を置き換えます。
- MEMBERSHIP_NAME: フリートに登録されているクラスタを一意に表すために使用するメンバーシップ名。
- CLUSTER_NAME: Config Connector で作成したクラスタを一意に表すために使用する名前。
別のプロジェクトにクラスタを登録する
次のコードを GKEHubMembership
リソースの metadata
フィールドに追加して、クラスタを別プロジェクトのフリートに登録します。
metadata:
annotations:
cnrm.cloud.google.com/project-id: FLEET_PROJECT_ID
以下を置き換えます。
- FLEET_PROJECT_ID: GKE クラスタの登録に選択したフリート ホスト プロジェクト。
既存のクラスタを登録
既存のクラスタを登録する場合は、作成された方法に関係なく、次の構成を使用します。この場合、Config Connector が見つけられるように、クラスタの完全なリソース名を指定する必要があります。GKEHubMembership
リソースの resourceRef
フィールドは、次のように置き換えます。
resourceRef:
external: //container.googleapis.com/CLUSTER_RESOURCE_NAME
以下を置き換えます。
- CLUSTER_RESOURCE_NAME: GKE クラスタの Google Cloud リソース名。例:
projects/my-project/zones/us-west1-a/clusters/my-cluster
クラスタを Config Connector で作成した場合、完全修飾クラスタ名を指定する必要はありません。
登録済みの GKE クラスタで Workload Identity を有効にする
Workload Identity を有効にする場合、クラスタの登録と同じ構成を使用しますが、次の追加手順が適用されます。
ContainerCluster
リソースのspec
フィールドに次の記述を追加して、GKE Workload Identity を有効にします。これは、新しいクラスタと既存のクラスタの両方で行う必要があります。spec: workloadIdentityConfig: identityNamespace: PROJECT_ID.svc.id.goog
以下を置き換えます。
- PROJECT_ID: GKE クラスタ リソースを作成するために名前空間アノテーションによって選択したデフォルトのプロジェクト。
GKEHubMembership
リソース ブロックのspec
フィールドに次の記述を追加して、フリートの Workload Identity を有効にします。spec: authority: issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME }
以下を置き換えます。
- PROJECT_ID: GKE クラスタ リソースを作成するために名前空間アノテーションによって選択したデフォルトのプロジェクト。
- LOCATION: GKE クラスタ リソースのプロビジョニングに選択したゾーンまたはリージョン。例:
us-central1-a
- CLUSTER_NAME: 作成したクラスタを一意に表すために使用する名前。
gcloud
gcloud
でクラスタを登録するには、gcloud CLI バージョン 281.0.0 以降が必要です。
コマンドラインからクラスタを登録すると、そのクラスタには Connect Agent がインストールされます。選択した登録オプションに応じて、エージェントは、Google Cloud に対する認証に フリートの Workload Identity か、Google Cloud サービス アカウントのいずれかを使用できます。
フリートの Workload Identity を使用して GKE クラスタを登録する(推奨)
前提条件の手順に沿って、クラスタで GKE Workload Identity が有効になっていることを確認します。
次のいずれかのコマンドを実行してクラスタを登録します。
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-uri=GKE_URI \ --enable-workload-identity
または
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-cluster=GKE_CLUSTER \ --enable-workload-identity
以下を置き換えます。
- MEMBERSHIP_NAME: フリートに登録されているクラスタを一意に表すために選択したメンバーシップ名。
- GKE_URI: GKE クラスタの URI(例:
https://container.googleapis.com/v1/projects/my-gke-project/locations/us-central1-a/clusters/my-gke-cluster
)。URI を取得するには、gcloud container clusters list --uri
を実行します。 - GKE_CLUSTER: 現在のプロジェクトの GKE クラスタの
location/name
。ロケーションは、ゾーンまたはリージョンのいずれかです(例:us-central1-a/my-gke-cluster
)。
サービス アカウントを使用して GKE クラスタを登録する
前提条件に記載されているとおり、Connect Agent が使用するサービス アカウントが作成されていることを確認します。
次のいずれかのコマンドを実行します。
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-uri=GKE_URI \ --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH
または
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-cluster=GKE_CLUSTER \ --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH
以下を置き換えます。
- MEMBERSHIP_NAME: フリートに登録されているクラスタを一意に識別するために選択したメンバーシップ名。
- SERVICE_ACCOUNT_KEY_PATH: 前提条件の一部としてダウンロードしたサービス アカウントの秘密鍵の JSON ファイルへのローカル ファイルパス。このサービス アカウント キーは、
creds-gcp
という名前の Secret としてgke-connect
Namespace に保存されます。 - GKE_URI: GKE クラスタの URI(例:
https://container.googleapis.com/v1/projects/my-gke-project/locations/us-central1-a/clusters/my-gke-cluster
)。URI を取得するには、gcloud container clusters list --uri
を実行します。 - GKE_CLUSTER: 現在のプロジェクトの GKE クラスタの
location/name
。ロケーションは、ゾーンまたはリージョンのいずれかです(例:us-central1-a/my-gke-cluster
)。
トラブルシューティング
この設定中に問題が発生した場合は、トラブルシューティング ガイドをご覧ください。
次のステップ
- フリート メンバーシップのステータスを取得するで説明されているように、クラスタの登録が成功したことを確認し、他のフリート メンバーシップの詳細を取得する。
- 登録済みクラスタに対して認証を設定する。
- Google Cloud コンソールからクラスタにログインする