kubeconfig について

Kubernetes 構成ファイル

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

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

クラスタを作成したら、kubeconfig エントリを生成するに従って、クラスタのコンテキストをローカル kubeconfig に追加します。

プライベート エンドポイント

すべてのクラスタには正規のエンドポイントがあります。このエンドポイントは、kubectl や他のサービスと TCP ポート 443 経由でクラスタ コントロール プレーンと通信するために使用する Kubernetes API サーバーを公開します。AWS では、このエンドポイントはクラスタ内でのみ解決可能な DNS 名です(例: gke-abcdefghijk-cp-ffabcdef123456.elb.us-west-1.amazonaws.com)。このエンドポイントには、公共のインターネットからはアクセスできません。プライベート クラスタ エンドポイント アドレスは、gcloud container aws clusters describe コマンドの出力の endpoint フィールドから取得できます。

Connect ゲートウェイ エンドポイント

デフォルトでは、gcloud container aws clusters get-credentials コマンドは Connect ゲートウェイを使用する kubeconfig を生成します。この kubeconfig により、kubectl は Connect を使用し、ユーザーの代わりに、トラフィックをプライベート エンドポイントに安全に転送します。Connect ゲートウェイを使用する場合、エンドポイントは https://connectgateway.googleapis.com/v1/projects/PROJECT_NUMBER/memberships/CLUSTER_NAME のようになります。ここで PROJECT_NUMBER はプロジェクト番号、CLUSTER_NAME はクラスタ名です。

VPC を介してクラスタのプライベート・エンドポイントにアクセスできれば、プライベート・エンドポイントに直接接続できます。プライベート・エンドポイントを使用して kubeconfig を生成するには、gcloud container aws clusters get-credentials --private-endpoint コマンドを使用します。

kubectl の認証について

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

gcloud を使用して新しい、または既存のクラスタ用の環境の kubeconfig をセットアップする場合、gcloud は、gcloud 自体で使用されるものと同じ認証情報を kubectl に渡します。たとえば gcloud auth login を使用する場合、userinfo.email スコープを含めそのユーザー個人の認証情報が kubectl に渡されます。これにより、GKE on AWS で kubectl クライアントを認証できます。

ユーザーまたは Google Cloud サービス アカウントが認証された後、GKE on AWS に対するアクションの実行をアカウントに許可する必要があります。クラスタ管理者は、適切なロールベース アクセス制御を設定して承認を構成します。