kubeconfig について

Kubernetes の構成ファイル

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

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

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

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

すべてのクラスタには正規のエンドポイントがあります。このエンドポイントは、kubectl や他のサービスと TCP ポート 443 経由でクラスタ コントロール プレーンと通信するために使用する Kubernetes API サーバーを公開します。Azure では、このエンドポイントは、内部接続ロードバランサにバックアップされた単一のプライベート IP です(例: 10.0.1.5)。このエンドポイントには、公共のインターネットからはアクセスできません。限定公開クラスタ エンドポイント アドレスは、gcloud container azure clusters describe コマンドの出力の endpoint フィールドから取得できます。

コネクト・ゲートウェイ エンドポイント

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

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

kubectl の認証について

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

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

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