EKS クラスタを接続する

概要

クラスタの接続とは、Google Cloud フリート管理にクラスタを登録し、GKE 接続クラスタ ソフトウェアをインストールすることで、クラスタを Google Cloud に接続することを意味します。

クラスタは、gcloud CLI または Terraform を使用して接続できます。Terraform を使用して EKS クラスタを作成して接続する方法については、GKE 接続クラスタのサンプルの GitHub リポジトリをご覧ください。

gcloud を使用して EKS クラスタを接続するには、次の操作を行います。

前提条件

お使いのクラスタがクラスタ要件を満たしていることを確認します。

クラスタを接続する際には、次の項目を指定する必要があります。

  • サポートされている Google Cloud の管理リージョン、および
  • プラットフォームのバージョン

管理リージョンは、接続クラスタを管理する Google Cloud リージョンです。サポートされている任意のリージョンを選択できますが、クラスタに地理的に最も近いリージョンを選択することをおすすめします。管理リージョンにユーザーデータは保存されません。

プラットフォームのバージョンは、クラスタにインストールする GKE 接続クラスタのバージョンです。サポートされているすべてのバージョンを一覧表示するには、次のコマンドを実行します。

gcloud container attached get-server-config  \
  --location=GOOGLE_CLOUD_REGION

GOOGLE_CLOUD_REGION は、クラスタを管理する Google Cloud ロケーションの名前に置き換えます。

プラットフォーム バージョンの採番

このドキュメントでは、Kubernetes バージョンと区別するために、GKE 接続クラスタのバージョンをプラットフォーム バージョンとして表記しています。GKE 接続クラスタは、GKE と同じバージョン採番規則を使用します(例: 1.21.5-gke.1)。クラスタを接続または更新する場合は、プラットフォーム バージョンのマイナー バージョンが、クラスタの Kubernetes バージョンと同じか 1 つ下のものを選択する必要があります。たとえば、Kubernetes v1.22.* を実行するクラスタは、GKE 接続クラスタ プラットフォーム バージョン 1.22.* または 1.21.* に接続できます。

これにより、GKE 接続クラスタをアップグレードする前に、クラスタを次のマイナー バージョンにアップグレードできます。

EKS クラスタを接続する

EKS クラスタを Google Cloud フリート管理に接続するには、次の操作を行います。

  1. kubeconfig ファイルに、接続するクラスタのエントリがあることを確認します。

    aws eks update-kubeconfig --region AWS_REGION \
      --name CLUSTER_NAME
    
  2. 次のコマンドを使用して、OIDC 発行者の URL を取得します。

    aws eks describe-cluster \
      --region AWS_REGION \
      --name CLUSTER_NAME \
      --query "cluster.identity.oidc.issuer" \
      --output text
    

    このコマンドの出力が OIDC 発行者の URL になります。後で使用するために、この値を保存しておきます。

  3. 次のコマンドを実行して、クラスタの kubeconfig コンテキストを抽出し、KUBECONFIG_CONTEXT 環境変数に保存します。

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  4. gcloud container attached clusters register コマンドを使用して、クラスタを登録します。

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=eks \
      --issuer-url=ISSUER_URL \
      --context=KUBECONFIG_CONTEXT \
      --kubeconfig=KUBECONFIG_PATH
    

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

  • AWS_REGION: EKS クラスタが配置されている AWS リージョン
  • CLUSTER_NAME: クラスタの名前
  • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン
  • PLATFORM_VERSION: クラスタに使用する GKE 接続クラスタのバージョン
  • PROJECT_NUMBER: クラスタを登録するフリート ホスト プロジェクト
  • ISSUER_URL: 前に取得した発行元 URL
  • KUBECONFIG_CONTEXT: 前に抽出した EKS クラスタにアクセスするための kubeconfig のコンテキスト
  • KUBECONFIG_PATH: kubeconfig のパス

Cloud Logging / Cloud Monitoring を認可する

GKE 接続クラスタでシステムログと指標を作成して Google Cloud にアップロードするには、認可が必要です。

Kubernetes ワークロード ID gke-system/gke-telemetry-agent が Google Cloud Logging にログを書き込み、Google Cloud Monitoring に指標を書き込むことを認可するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
  --member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
  --role=roles/gkemulticloud.telemetryWriter

GOOGLE_PROJECT_ID は、クラスタの Google Cloud プロジェクト ID に置き換えます。

この IAM バインディングは、ログと指標をアップロードするための Google Cloud プロジェクトのプロジェクトにあるすべてのクラスタへのアクセスを許可します。これは、プロジェクトに対して最初のクラスタを作成した後にのみ、実行する必要があります。

Google Cloud プロジェクトに 1 つ以上のクラスタを作成しない限り、この IAM バインディングの追加は失敗します。これは、クラスタが作成されるまで、参照する Workload Identity プール(GOOGLE_PROJECT_ID.svc.id.goog)がプロビジョニングされないためです。