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.21.* または 1.22.* に接続できます。

これにより、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)が、クラスタが作成されるまでプロビジョニングされないためです。