kubectl 用のクラスタ アクセスの構成

このページでは、Google Kubernetes Engine で kubectl コマンドライン ツールのクラスタ アクセスを構成する方法について説明します。

概要

Google Cloud Platform プロジェクト内で複数のクラスタを実行する場合は、kubectl と通信するクラスタを選択する必要があります。kubectl のデフォルトのクラスタを設定するには、Kubernetes の kubeconfig ファイルで現在のコンテキストを設定します。また、--cluster フラグを使用して特定のクラスタに対して kubectl コマンドを実行することもできます。

次のセクションでは、kubeconfig の仕組み、kubectl のデフォルト クラスタを設定する方法、特定のクラスタに対して個別の kubectl コマンドを実行する方法について説明します。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

Kubernetes の構成ファイル

Kubernetes では、kubeconfig という YAML ファイルに kubectl のクラスタ認証情報が保存されます。kubeconfig には、コマンド実行時に kubectl が参照するコンテキストのリストが含まれます。デフォルトでは、このファイルは $HOME/.kube/config に保存されます。

コンテキストとは、アクセス パラメータのグループのことです。各コンテキストには 1 つの Kubernetes クラスタ、1 人のユーザー、1 つの名前空間が含まれます。現在のコンテキストとは、現在 kubectl のデフォルトとなっているクラスタのことです。kubectl コマンドはすべて、このクラスタに対して実行されます。

gcloud container clusters create を使用してクラスタを作成すると、環境内の kubeconfig にエントリが自動的に追加され、現在のコンテキストがそのクラスタに変更されます。

gcloud container clusters create my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

Google Cloud Platform Console を使用するか、別のパソコンから gcloud を使用してクラスタを作成する場合、環境の kubeconfig は更新されません。また、あるプロジェクト チームメンバーが gcloud を使用してメンバー自身のパソコンからクラスタを作成する場合、そのメンバーの kubeconfig は更新されますが、あなたのファイルは更新されません。こうしたクラスタをローカルの kubeconfig に追加するには、以下の手順に従ってください。

クラスタ エンドポイントについて

すべてのクラスタには正規のエンドポイントがあります。エンドポイントは Kubernetes API サーバーの IP アドレスであり、kubectl などのサービスはこの IP アドレスを使用してクラスタ マスターと通信します。このエンドポイントは、GCP Console ではクラスタの [詳細] タブの [エンドポイント] フィールドに表示され、gcloud container clusters describe の出力では endpoint フィールドに表示されます。

gcloud container clusters get-credentials を実行すると、kubeconfig の更新の一部としてクラスタ エンドポイントが取得されます。

限定公開クラスタには、privateEndpointpublicEndpoint の 2 つの固有エンドポイント値があります。前者は内部 IP アドレスで、後者は外部 IP アドレスです。限定公開クラスタに対して get-credentials を実行すると、デフォルトでは外部 IP アドレスがエンドポイントとして設定されます。内部 IP をエンドポイントとして使用する場合は、限定公開クラスタの内部 IP アドレスを使用して kubeconfig エントリを生成するをご覧ください。

kubectl の認証の概要

すべての GKE クラスタは、kubectl によって提示された認証情報を検証し、ユーザーまたはサービス アカウント ID に関連付けられたメールアドレスを取得することによって、GCP ユーザーおよびサービス アカウント ID を受け入れるように構成されています。その結果、認証に成功するには、こうしたアカウントの認証情報に userinfo.email OAuth スコープが含まれている必要があります。

新規クラスタや既存のクラスタ用に、gcloud を使用して環境の kubeconfig を設定する場合、gcloud 自体で使用される認証情報が gcloud から kubectl に渡されます。たとえば、gcloud auth login を使用する場合、個人の認証情報が userinfo.email スコープも含めて kubectl に渡されます。その結果、GKE クラスタが kubectl クライアントを認証できるようになります。

もしくは、Compute Engine インスタンスで実行している場合に、GCP サービス アカウントの認証情報を使用するように kubectl を構成することもできます。ただし、デフォルトでは、Compute Engine インスタンスで作成された認証情報に userinfo.email スコープは含まれません。したがって、Compute Engine インスタンスの作成時に --scopes フラグを使用するなどして、このスコープを明示的に追加する必要があります

ユーザーまたは GCP サービス アカウントを認証する場合、同時に GKE クラスタでの任意の操作も承認する必要があります。承認の構成方法の詳細については、役割ベースのアクセス制御をご覧ください。

kubectl の現在のコンテキストを表示する

kubectl の現在のコンテキストを表示するには、次のコマンドを実行します。

kubectl config current-context

kubeconfig を表示する

環境の kubeconfig を表示するには、次のコマンドを実行します。

kubectl config view

このコマンドは、kubeconfig エントリが生成されたすべてのクラスタのリストを返します。GKE クラスタがリストされた場合、現在の環境でその GKE クラスタに対して kubectl コマンドを実行できます。それ以外の場合は、クラスタ用の kubeconfig エントリを生成する必要があります。

kubeconfig エントリを生成する

GCP Console、別のパソコン、またはプロジェクトの別のメンバーによって作成されたクラスタに対して kubectl コマンドを実行するには、環境内で kubeconfig エントリを生成する必要があります。

次のコマンドを実行して kubeconfig エントリを生成します。

gcloud container clusters get-credentials [CLUSTER_NAME]

ここで、[CLUSTER_NAME] はクラスタ名です。

kubeconfig エントリには、次のいずれかが含まれています。

  1. gcloud auth list で示される認証情報
  2. アプリケーションのデフォルト認証情報(構成されている場合)。

限定公開クラスタの内部 IP アドレスを使用して kubeconfig エントリを生成する

get-credentials の実行時に --internal-ip を指定すると、限定公開クラスタの内部 IP アドレスを kubeconfig に書き込めます。

gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

kubectl コマンドのデフォルト クラスタを設定する

以前にクラスタの kubeconfig エントリを生成した場合は、gcloud container clusters get-credentials を実行すると、kubectl の現在のコンテキストをそのクラスタに切り替えることができます。

たとえば、my-clustermy-new-cluster の 2 つのクラスタがあるプロジェクトについて考えてみましょう。現在のコンテキストは my-new-cluster ですが、すべての kubectl コマンドを my-cluster に対して実行します。

現在のコンテキストを my-cluster に切り替えるには、次のコマンドを実行します。

gcloud container clusters get-credentials my-cluster

特定のクラスタに対して個別の kubectl コマンドを実行する

特定のクラスタに対して個別の kubectl コマンドを実行するには、--cluster フラグの引数として kubeconfig の記述どおりにクラスタの名前を渡します。

たとえば、my-clustermy-new-cluster の 2 つのクラスタがある環境があり、現在のコンテキストが my-cluster であるとします。アプリケーションを my-new-cluster にデプロイしたい一方で、現在のコンテキストを変更したくないとします。

アプリケーションを my-new-cluster にデプロイするには、次のコマンドを実行します。

kubectl run my-app --image gcr.io/my-bucket/my-app:1.0 --cluster my-new-cluster

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント