CNCF 準拠クラスタを接続する

GKE 接続クラスタを使用すると、AWS、Azure など、どこでホストされているかにかかわらず、既存の Kubernetes クラスタを 集中管理用の Google Kubernetes Engine(GKE)Enterprise エディションのダッシュボードに取り込むことができます。これには、任意の CNCF 準拠の Kubernetes クラスタを接続する機能が含まれます。

サポートされている Kubernetes クラスタ

x86 ノードを持つ準拠 Kubernetes クラスタをフリートに追加し、Google Cloud コンソール内で GKE clusters と一緒に表示できます。

Google では、すべての Kubernetes ディストリビューションの完全な機能互換性を検証していませんが、検出された非互換性についてはここに記載されています。詳細とトラブルシューティングのサポートについては、Google Kubernetes Engine(GKE)Enterprise エディションのバージョンとアップグレードのサポートをご覧ください。

前提条件

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

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

  • サポートされている 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 接続クラスタをアップグレードする前に、クラスタを次のマイナー バージョンにアップグレードできます。

クラスタを接続する

CNCF 準拠クラスタを Google Cloud フリート管理に接続するには、次のコマンドを実行します。

  1. kubeconfig ファイルに、接続するクラスタのエントリがあることを確認します。具体的な手順はディストリビューションによって異なります。

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

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  3. クラスタを登録するコマンドは、クラスタに一般公開 OIDC 発行者か限定公開 OIDC 発行者があるかによって若干異なります。クラスタに該当するタブを選択します。

    限定公開 OIDC 発行者

    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=generic \
      --context=KUBECONFIG_CONTEXT \
      --has-private-issuer \
      --kubeconfig=KUBECONFIG_PATH
    

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

    • CLUSTER_NAME: クラスタの名前
    • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン
    • PROJECT_NUMBER: クラスタを登録するフリートホスト プロジェクト
    • PLATFORM_VERSION: クラスタに使用するプラットフォーム バージョン
    • KUBECONFIG_CONTEXT: クラスタにアクセスするための kubeconfig 内のコンテキスト
    • KUBECONFIG_PATH: kubeconfig へのパス

    一般公開 OIDC 発行者

    1. クラスタの OIDC 発行者 URL を取得し、後で使用できるよう保存します。具体的な手順はディストリビューションによって異なります。

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

      KUBECONFIG_CONTEXT=$(kubectl config current-context)
      
    3. 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=generic \
        --issuer-url=ISSUER_URL \
        --context=KUBECONFIG_CONTEXT \
        --kubeconfig=KUBECONFIG_PATH
      

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

      • CLUSTER_NAME: クラスタの名前
      • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン
      • PROJECT_NUMBER: クラスタを登録するフリート ホスト プロジェクト
      • PLATFORM_VERSION: クラスタで使用する GKE 接続クラスタのバージョン
      • ISSUER_URL: 前に取得した発行元 URL
      • KUBECONFIG_CONTEXT: 前に抽出した、クラスタにアクセスするための 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)が、クラスタが作成されるまでプロビジョニングされないためです。