Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
kubeconfig は、kubectl がどの Kubernetes クラスタへ、どの user と context で接続するかを決める設定ファイルです。複数クラスタを扱う管理端末では、context 名とファイルの権限を管理しておかないと、操作対象の取り違えや認証情報の漏えいにつながります。
この記事では、Ubuntu 26.04 の管理端末で kubeconfig を扱う基本として、クラスタごとの kubeconfig を分けて保存し、kubectl config view --merge --flatten で統合し、~/.kube/config として配置する流れをまとめます。
- kubeconfig に含まれる情報
~/.kubeとconfigの権限- cluster / context / user 名の正規化
- 複数 kubeconfig の merge と flatten
- context の確認と切り替え
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| 標準配置 | /home/myadmin/.kube/config |
| 作業ディレクトリ例 | ~/work/k8s/kubeconfig_merge |
| ディレクトリ権限 | 0700 |
| ファイル権限 | 0600 |
kubeconfig に含まれる情報
kubeconfig には cluster、user、context、current-context が含まれます。user には token、client certificate、exec 認証設定など、クラスタへ接続するための認証情報が入る場合があります。
kubeconfig は単なる接続先一覧ではありません。認証情報を含むことがあるため、ログ、差分、チャット、チケット、公開リポジトリへ貼り付けないように扱います。
kubectl config view
kubectl config get-contexts
kubectl config current-context保存先と権限を決める
標準の保存先は ~/.kube/config です。ディレクトリは 0700、ファイルは 0600 を基本にします。
install -d -m 0700 "$HOME/.kube"
touch "$HOME/.kube/config"
chmod 0600 "$HOME/.kube/config"
ls -ld "$HOME/.kube"
ls -l "$HOME/.kube/config"クラスタごとの kubeconfig を分ける
複数クラスタを扱う場合は、最初から ~/.kube/config に直接追記するより、クラスタごとの kubeconfig を別ファイルに分けて保存してから統合すると管理しやすくなります。
workdir="$HOME/work/k8s/kubeconfig_merge"
cluster_dir="$workdir/clusters"
merged_dir="$workdir/merged"
install -d -m 0775 "$workdir"
install -d -m 0775 "$cluster_dir"
install -d -m 0700 "$merged_dir"
chmod 0600 "$cluster_dir"/*.yaml名前を正規化する
kubeadm や MicroK8s などから取得した kubeconfig は、context 名が kubernetes-admin@kubernetes のように重複しやすい場合があります。複数クラスタを統合する前に、cluster、context、user をクラスタ名や FQDN に合わせてそろえます。
kubectl --kubeconfig "$cluster_dir/cluster-a.yaml" config rename-cluster kubernetes k8s-cp-g01-n001.example.com
kubectl --kubeconfig "$cluster_dir/cluster-a.yaml" config rename-context kubernetes-admin@kubernetes k8s-cp-g01-n001.example.com
kubectl --kubeconfig "$cluster_dir/cluster-a.yaml" config rename-user kubernetes-admin k8s-cp-g01-n001.example.com
kubectl --kubeconfig "$cluster_dir/cluster-a.yaml" config use-context k8s-cp-g01-n001.example.com
kubectl --kubeconfig "$cluster_dir/cluster-a.yaml" config get-contexts複数 kubeconfig を merge する
KUBECONFIG に複数ファイルをコロン区切りで指定し、kubectl config view --merge --flatten で統合します。--flatten を付けると、参照情報を1つの kubeconfig にまとめやすくなります。
export KUBECONFIG="$cluster_dir/cluster-a.yaml:$cluster_dir/cluster-b.yaml"
kubectl config view --merge --flatten > "$merged_dir/config"
chmod 0600 "$merged_dir/config"
kubectl --kubeconfig "$merged_dir/config" config get-contexts~/.kube/config へ配置する
統合した kubeconfig を標準の位置へ配置します。既存ファイルを置き換える前にバックアップを取り、配置後に context を確認します。
cp -a "$HOME/.kube/config" "$HOME/.kube/config.bak"
install -m 0600 "$merged_dir/config" "$HOME/.kube/config"
kubectl config get-contexts
kubectl config current-contextcontext を切り替える
複数クラスタを扱うときは、実行前に current context を確認します。特に kubectl delete や helm upgrade の前には、namespace と context をセットで確認します。
kubectl config get-contexts
kubectl config use-context k8s-cp-g01-n001.example.com
kubectl config set-context --current --namespace default
kubectl get nodes -o wide到達不能なクラスタの扱い
一時的に到達不能なクラスタがある場合でも、既存の kubeconfig をすぐ削除しない方がよい場面があります。復旧後に再利用する可能性があるため、どのクラスタが取得できなかったのかを分けて記録します。
kubectl --context k8s-cp-g01-n001.example.com get nodes
kubectl --context k8s-cp-g02-n001.example.com get nodes
kubectl config get-contexts差分共有に注意する
kubeconfig は認証情報を含むため、構成管理ツールの --diff や CI ログに内容が出ないように注意します。必要な場合は、認証情報をマスクするか、差分出力を抑制します。
~/.kubeは0700にする~/.kube/configは0600にする- cluster / context / user 名をクラスタごとに一意にする
kubectl config view --merge --flattenで統合する- 作業前に current context と namespace を確認する
- kubeconfig の差分や本文を不用意に共有しない
まとめ
Ubuntu 26.04 の管理端末で kubeconfig を扱う場合、重要なのは kubectl が動くことだけではありません。複数クラスタの context 名を一意にし、権限を絞り、認証情報を含むファイルとして慎重に扱う必要があります。
クラスタごとの kubeconfig を分けて保存し、KUBECONFIG と kubectl config view --merge --flatten で統合してから ~/.kube/config へ配置すると、管理端末で複数クラスタを扱いやすくなります。

