GKE クラスタをフリートに登録する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

準備

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

ユースケースによっては、GKE クラスタの登録で、以下のことを行う必要が生じる場合もあります。

クラスタの登録

前提条件で確認したとおり、フリートの 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

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

  1. (省略可)登録済みクラスタでフリートの Workload Identity(推奨)を使用する場合は、クラスタで GKE Workload Identity を有効にします。GKE Workload Identity を備えたクラスタでは、Google Cloud コンソールから登録するときに、フリートの Workload Identity が自動的に有効になります。
  2. Google Cloud コンソールで、Anthos クラスタ ページに移動します。このページには、登録されているすべてのクラスタが表示されます。

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

  3. [既存のクラスタを登録] をクリックします。

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

Terraform

google-beta プロバイダを使用する Terraform で GKE クラスタを登録できます。登録の構成に使用する gke_hub_membership リソースの詳細については、terraform レジストリをご覧ください。

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

GKE クラスタを登録する

クラスタを登録するには、構成で次のブロックを使用します。

  1. 次のスニペットのように、google-beta プロバイダを必須プロバイダとして指定します。バージョンは 3.62.0 以降である必要があります。

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

    gke_hub_membership を使用する場合、このプロバイダは必須です。

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

    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 リソースをプロビジョニングするために選択するデフォルトのプロジェクト。
  3. 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
  4. 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} です。

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

Workload Identity を有効にする場合、クラスタの登録と同じ構成を使用しますが、次の追加手順が適用されます。

  1. 関連する google_container_cluster リソース ブロックに以下を追加して、GKE Workload Identity を有効にします。これは、新しいクラスタと既存のクラスタの両方で行う必要があります。

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

    以下を置き換えます。

    • PROJECT_ID: Terraform リソースをプロビジョニングするために選択するデフォルトのプロジェクト。
  2. 関連する 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} です。

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: 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 を有効にする場合、クラスタの登録と同じ構成を使用しますが、次の追加手順が適用されます。

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

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

gcloud

gcloud でクラスタを登録するには、gcloud CLI バージョン 281.0.0 以降が必要です。

コマンドラインからクラスタを登録すると、そのクラスタには Connect Agent がインストールされます。選択した登録オプションに応じて、エージェントは、Google Cloud に対する認証に フリートの Workload Identity か、Google Cloud サービス アカウントのいずれかを使用できます。

フリートの Workload Identity を使用して GKE クラスタを登録する(推奨)

  1. 前提条件の手順に沿って、クラスタで GKE Workload Identity が有効になっていることを確認します。

  2. 次のいずれかのコマンドを実行してクラスタを登録します。

    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 クラスタを登録する

  1. 前提条件に記載されているとおり、Connect Agent が使用するサービス アカウントが作成されていることを確認します。

  2. 次のいずれかのコマンドを実行します。

    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)。

トラブルシューティング

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

次のステップ