Google Cloud にあるクラスタをフリートに登録する

このページでは、Google Cloud にある GKE クラスタをフリートに追加する方法について説明します。プロジェクトとユースケースに応じて、登録には、Google Cloud コンソール、Terraform、Config Connector、または Google Cloud CLI を使用できます。 また、Google Cloud CLI を使用して、1 ステップで新しいクラスタを作成して登録することもできます。

準備

クラスタの登録に関する一般的な前提条件に沿って行っていることを確認します。

ユースケースによっては、Google Cloud 登録の GKE クラスタでも次の処理が必要になる場合があります。

Google Cloud に GKE クラスタを登録する

前提条件で確認したとおり、フリートの Workload Identity を有効にした GKE クラスタを登録することをおすすめします。これにより、アプリケーションが Google Cloud API とサービスに対して一貫した認証を行うことができます。フリートの Workload Identity を有効にする利点については、フリートの Workload Identity を使用するをご覧ください。

次のいずれかの方法を使用してクラスタを登録すると、必要に応じてフリートの Workload Identity を有効にできます。

  • GKE Enterprise を有効にしている場合は、Google Cloud コンソールから同じプロジェクトで既存のクラスタを登録できます。これは、GKE クラスタを登録する最も簡単で早い方法です。この方法を使用すると、すぐにクラスタをフリートの一部としてコンソールに表示し、フリート対応機能(Config Sync など)を使用できますGKE Enterprise へのアップグレード中に、既存のクラスタの一部またはすべてを登録することもできます。

  • Google Cloud CLI を使用して、新規または既存の GKE クラスタを登録できます(GKE Enterprise が有効かどうかは関係ありません)。

  • GKE クラスタは、TerraformConfig Connector を使用して作成および登録できます(GKE Enterprise は有効でも無効でも構いません)。

GKE クラスタを登録するには、次のようにします。

コンソール

既存のクラスタを登録

クラスタでフリートの Workload Identity(推奨)を使用する場合は、以下の手順を行う前に、クラスタの GKE Workload Identity が有効になっていることを確認します。Autopilot クラスタでは、デフォルトで GKE Workload Identity が有効になっています。GKE Workload Identity を備えたクラスタでは、Google Cloud コンソールから登録するときに、フリートの Workload Identity が自動的に有効になります。

  1. Google Cloud コンソールで、[GKE クラスタ] ページに移動します。

    [GKE クラスタ] ページに移動

  2. フリートに追加する未登録クラスタの横にある [登録] をクリックします。

  3. 表示される確認ダイアログで、再度 [登録] をクリックします。

gcloud

Google Cloud CLI を使用して、新規または既存のクラスタを登録できます。このコマンドを使用するには、gcloud CLI バージョン 450.0.0 以降が必要です。

Google Cloud CLI を使用してクラスタを登録すると、デフォルトで、クラスタはリージョン メンバーのロケーションになります。

新しいクラスタを作成して登録

  • 新しい GKE Autopilot クラスタを作成して登録するには、次のコマンドを実行します。

    gcloud container clusters create-auto CLUSTER_NAME --enable-fleet
    

    CLUSTER_NAME は、作成するクラスタの一意の名前に置き換えます。これはクラスタのメンバーシップ名にもなります。選択したフリートにこの名前のクラスタがすでに存在する場合は、エラーが返されます。

  • Workload Identity を有効にした新しい GKE Standard クラスタを作成して登録するには、次のコマンドを実行します。

    gcloud container clusters create CLUSTER_NAME --enable-fleet \
    --workload-pool=PROJECT_ID.svc.id.goog
    

    次のように置き換えます。

    • CLUSTER_NAME: 作成するクラスタの一意の名前。これはクラスタのメンバーシップ名にもなります。選択したフリートにこの名前のクラスタがすでに存在する場合は、エラーが返されます。
    • PROJECT_ID: 新しいクラスタを所有するプロジェクトの Google Cloud プロジェクト ID。

    Standard クラスタを作成する場合は、登録済みクラスタのフリート Workload Identity を有効にするため、GKE Workload Identity を有効にしたクラスタを作成することをおすすめします。ただし、この機能を使用しない場合は、--workload-pool フラグを省略できます。Autopilot クラスタでは、デフォルトで Workload Identity が有効になっています。

作成するクラスタに応じて、Standard ゾーンStandard リージョンAutopilot のクラスタを作成するための他のオプションも指定できます。Google Cloud CLI のデフォルト ゾーンを構成していない場合は Compute Engine ゾーンを指定し、デフォルト プロジェクトを構成していない場合はクラスタを持つ Google Cloud プロジェクトを指定する必要があります。

さまざまなタイプの GKE クラスタの作成方法については、GKE のドキュメントをご覧ください。

既存のクラスタを登録

クラスタで GKE Workload Identity がすでに有効になっている場合、どちらのコマンドでもクラスタのフリート Workload Identity が有効になります。

  • Google Cloud の既存の GKE クラスタをプロジェクトのフリートに登録するには、次のコマンドを実行します。

    gcloud container clusters update CLUSTER_NAME --enable-fleet
    

    CLUSTER_NAME は、登録するクラスタの名前に置き換えます。これはクラスタのメンバーシップ名にもなります。

  • 別のプロジェクトのフリートにクラスタを登録するには、以下に示すように、同じコマンドを --fleet-project フラグを指定して使用します。次のコマンドを実行する前に、プロジェクト間の登録に必要な権限を設定していることを確認してください。

    gcloud container clusters update CLUSTER_NAME --enable-fleet --fleet-project=PROJECT_ID_OR_NUMBER
    
    • CLUSTER_NAME は、登録するクラスタの名前に置き換えます。これはクラスタのメンバーシップ名にもなります。
    • PROJECT_ID_OR_NUMBER は、選択したフリート ホスト プロジェクトのプロジェクト ID または番号に置き換えます。

Terraform

google-beta プロバイダを使用する Terraform で GKE クラスタを登録できます。GKE クラスタの管理に使用される google_container_cluster リソースの完全なリファレンスは、Terraform レジストリにあります。

以下の手順を行う前に、前提条件に記載のとおり、Terraform で使用するサービス アカウントが作成されていることを確認してください。

新しいクラスタを作成して登録

新しいクラスタを作成して登録するには、Terraform 構成に次のブロックを追加します。

  1. google-beta プロバイダを必須プロバイダとして指定します。

    terraform {
      required_providers {
        google-beta = {
          source = "hashicorp/google-beta"
          version = "VERSION"
        }
      }
    }
    

    VERSION を 5.6.0 以降に置き換えます。

  2. プロバイダに次のデフォルト値を設定します。

    provider "google-beta" {
      credentials = file("SERVICE_ACCOUNT_KEY_PATH")
      project = "PROJECT_ID"
    }
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_KEY_PATH: 前提条件の一部としてダウンロードしたサービス アカウントの秘密鍵の JSON ファイルへのローカルパス。このサービス アカウント キーは、creds-gcp という名前の Secret として gke-connect Namespace に保存されます。このサービス アカウント キーにより、Terraform が Google Cloud アカウントにアクセスできるようになります。
    • PROJECT_ID: Terraform リソースをプロビジョニングする Google Cloud プロジェクト ID。
  3. 新しいクラスタを作成して登録します。

    resource "google_container_cluster" "TF_CLUSTER_RESOURCE_NAME" {
      provider = google-beta
      name               = "CLUSTER_NAME"
      location           = "ZONE"
      initial_node_count = 1
      fleet {
        project = "FLEET_HOST_PROJECT"
      }
    }
    

    次のように置き換えます。

    • TF_CLUSTER_RESOURCE_NAME: 作成する新しい google_container_cluster リソースの一意の名前。
    • CLUSTER_NAME: 作成して登録する新しい GKE クラスタの一意の名前。
    • ZONE: GKE クラスタ リソースのゾーン。例: us-central1-a
    • FLEET_HOST_PROJECT: クラスタを作成して登録する Google Cloud プロジェクト ID。これを設定しないと、クラスタはフリートに登録されません。クラスタを別のプロジェクトのフリートに登録する場合は、別のプロジェクト ID を指定します。

既存のクラスタを登録

既存のクラスタを登録するには、クラスタの google_container_cluster リソース構成に次のブロックを追加します。

fleet {
       project = "FLEET_HOST_PROJECT"
     }

FLEET_HOST_PROJECT は、クラスタが属する Google Cloud プロジェクト ID に置き換えます。クラスタを別のプロジェクトのフリートに登録する場合は、別のプロジェクト ID に置き換えます。

登録済みの GKE クラスタで Workload Identity を有効にする

Terraform を使用して、クラスタの Workload Identity を有効にできます。

新規または既存のクラスタに対して Workload Identity を有効にするには、関連するクラスタの google_container_cluster リソース構成に次のブロックを追加します。

 workload_identity_config {
   workload_pool = "PROJECT_ID.svc.id.goog"
 }

PROJECT_ID は、Terraform リソースの Google Cloud プロジェクト ID に置き換えます。

Config Connector

Config Connector アドオンがインストールされている場合は、Config Connector を使用して GKE クラスタを登録できます。Config Connector のバージョンが 1.47.0 以降であることと、前提条件に記載のとおり、サービス アカウントが作成されていることを確認してください。

GKEHubMembership リソースの完全なリファレンスについては、Config Connector リファレンス ドキュメントをご覧ください。

GKE クラスタを登録する

クラスタを登録するには、まず Config Connector ガイドの手順に沿って、リソースを作成する場所を指定します。つづいて、以下のように、YAML ファイルを作成して登録し、必要に応じてクラスタを作成します。

GKE クラスタの作成と登録

  1. 次の簡単な例に示すように、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 のドキュメントをご覧ください。

  2. GKE クラスタのメンバーシップを登録します。

    apiVersion: gkehub.cnrm.cloud.google.com/v1beta1
    kind: GKEHubMembership
    metadata:
      name: MEMBERSHIP_NAME
    spec:
      location: MEMBERSHIP_LOCATION
      endpoint:
        gkeCluster:
          resourceRef:
            name: CLUSTER_NAME
    

    以下を置き換えます。

    • MEMBERSHIP_NAME: フリートに登録されているクラスタを一意に表すために使用するメンバーシップ名。
    • MEMBERSHIP_LOCATION: クラスタのメンバーシップを管理するフリート サービスのロケーション。クラスタ自体のロケーション(推奨)または global を指定できます。詳細については、フリートのメンバーシップ ロケーションをご覧ください。クラスタのロケーションと異なるロケーションは指定できません。指定すると、登録は失敗します。
    • 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 を有効にする場合、クラスタの登録と同じ構成を使用しますが、次の追加手順が適用されます。

  1. ContainerCluster リソースの spec フィールドに次の記述を追加して、GKE Workload Identity を有効にします。これは、新しいクラスタと既存のクラスタの両方で行う必要があります。

    spec:
      workloadIdentityConfig:
        workloadPool: PROJECT_ID.svc.id.goog
    

    以下を置き換えます。

  2. 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: 作成したクラスタを一意に表すために使用する名前。

トラブルシューティング

この設定中に問題が発生した場合は、トラブルシューティング ガイドをご覧ください。

次のステップ