Kubernetesの認証情報とContext管理

kubectl コマンドがKubernetesクラスターと通信するためには、接続先のクラスター情報、ユーザー認証情報、およびそれらの組み合わせ(Context)が必要です。これらの情報は、通常 kubeconfig ファイルに保存されます。

kubeconfig ファイル

kubeconfig ファイルは、kubectl がKubernetesクラスターに接続するための設定情報を含むYAML形式のファイルです。デフォルトでは ~/.kube/config に配置されます。

kubeconfig ファイルは、主に以下の3つのセクションで構成されます。

  1. clusters:
    • 接続先のKubernetesクラスターに関する情報(APIサーバーのURL、証明書など)を定義します。
    • 複数のクラスター情報を登録できます。
  2. users:
    • クラスターにアクセスするためのユーザー認証情報(クライアント証明書、トークン、ユーザー名/パスワードなど)を定義します。
    • 複数のユーザー情報を登録できます。
  3. contexts:
    • clusteruser のペア、およびデフォルトで使用する namespace を指定したものです。
    • kubectl がどのクラスターに、どのユーザーとして、どのNamespaceで接続するかを定義します。

kubeconfig ファイルの例:

apiVersion: v1
kind: Config
clusters: # 接続先のKubernetesクラスター情報
- cluster:
    certificate-authority: /Users/USER/.minikube/ca.crt # クラスターのCA証明書
    server: https://127.0.0.1:55537 # APIサーバーのエンドポイント
  name: minikube # クラスターの名前 (任意の識別子)
users: # ユーザー認証情報
- name: minikube # ユーザーの名前 (任意の識別子)
  user:
    client-certificate: /Users/USER/.minikube/profiles/minikube/client.crt # クライアント証明書
    client-key: /Users/USER/.minikube/profiles/minikube/client.key # クライアント秘密鍵
contexts: # 接続先クラスターと認証情報の組み合わせ
- context:
    cluster: minikube # 参照するクラスターの名前
    namespace: default # デフォルトで使用するNamespace
    user: minikube # 参照するユーザーの名前
  name: minikube # Contextの名前 (任意の識別子)
current-context: minikube # 現在アクティブなContextの名前
preferences: {}

kubeconfig の操作

kubectl コマンドには、kubeconfig ファイルを操作するためのサブコマンドが用意されています。これにより、複数のKubernetesクラスターや異なる認証情報、Namespaceを簡単に切り替えて管理できます。

Contextの一覧表示

現在設定されているすべてのContextを表示します。現在アクティブなContextにはアスタリスク * が付きます。

kubectl config get-contexts

Contextの切り替え

指定したContextに切り替えます。これにより、以降の kubectl コマンドはそのContextの設定に従って実行されます。

kubectl config use-context <コンテキスト名>
# 例: kubectl config use-context minikube

現在のContextの表示

現在アクティブなContextの名前を表示します。

kubectl config current-context

Contextの追加

新しいContextを追加するには、set-cluster, set-credentials, set-context コマンドを組み合わせて使用します。

# クラスター情報を追加
kubectl config set-cluster my-new-cluster --server=https://<api-server-ip> --certificate-authority=/path/to/ca.crt

# ユーザー認証情報を追加
kubectl config set-credentials my-new-user --client-certificate=/path/to/client.crt --client-key=/path/to/client.key

# Contextを追加 (クラスターとユーザーを紐付け)
kubectl config set-context my-new-context --cluster=my-new-cluster --user=my-new-user --namespace=default

# 新しいContextに切り替える
kubectl config use-context my-new-context

kubeconfig ファイルを適切に管理することで、複数のKubernetes環境を効率的かつ安全に操作することができます。

参考