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

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

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

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

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: クラスタの名前。CLUSTER_NAME は、RFC 1123 ラベル名の標準に準拠している必要があります。
    • 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: クラスタの名前。CLUSTER_NAME は、RFC 1123 ラベル名の標準に準拠している必要があります。
      • 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 Workload Identity 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 project プロジェクト内のすべてのクラスタへのアクセスを許可します。プロジェクトに対して最初のクラスタを作成した後にのみ実行する必要があります。

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