๐ Kubernetes Kubeconfig
Kubeconfig๋ kubectl์ด Kubernetes ํด๋ฌ์คํฐ์ ํต์ ํ๋ ํต์ฌ ์ค์ ํ์ผ
Kubeconfig์ ๊ตฌ์กฐ์ ์ฌ์ฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌ
๐ Kubeconfig ์๊ฐ
- ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ํด ์ฌ์ฉ์๊ฐ ์์ฑํ ์ธ์ฆ์์ ํค๋ฅผ API ์๋ฒ์ ์ ๋ฌํด ์ฌ์ฉ์ ์ธ์ฆ ์ํ ๊ฐ๋ฅ
- ๋์ผ ์์
์ kubectl์์๋ ์ํ ๊ฐ๋ฅํ๋ฉฐ, ๋งค๋ฒ ์ต์
์ง์ ์ ๋นํจ์จ์
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ตฌ์ฑ ํ์ผ์ด kubeconfig
- ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ ~/.kube/config์ด๋ฉฐ, ๋ช
์์ ์ง์ ์์ด ์๋ ์ฐธ์กฐ
๐งฑ Kubeconfig ํ์ผ ๊ตฌ์กฐ
- kubeconfig๋ YAML ํฌ๋งท์ ๊ตฌ์ฑ ํ์ผ
- apiVersion: v1, kind: Config ์ง์
- 3๊ฐ์ง ์ฃผ์ ์น์
์ผ๋ก ๊ตฌ์ฑ: clusters, users, contexts
apiVersion: v1
kind: Config
clusters:
- name: my-cluster
cluster:
server: https://192.168.0.100:6443
certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: my-admin
user:
client-certificate: /etc/kubernetes/pki/admin.crt
client-key: /etc/kubernetes/pki/admin.key
contexts:
- name: my-admin@my-cluster
context:
cluster: my-cluster
user: my-admin
namespace: default
current-context: my-admin@my-cluster
๐๏ธ Clusters
- ์ ๊ทผํด์ผ ํ Kubernetes ํด๋ฌ์คํฐ ๋ชฉ๋ก ์ ์ฅ ์์ญ
- ๊ฐ๋ฐ/ํ
์คํธ/์ด์ ํ๊ฒฝ ๋๋ ๋ฉํฐ ํด๋ผ์ฐ๋ ๋ฑ ๋ค์ํ ํด๋ฌ์คํฐ ์ ์ ๊ฐ๋ฅ
- ๊ฐ ํญ๋ชฉ์ ์ด๋ฆ, API ์๋ฒ ์ฃผ์, CA ์ธ์ฆ์ ์ ๋ณด ํฌํจ ํ์
๐ค Users
- ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด ์ ์ฅ ์์ญ
- ์: admin ์ฌ์ฉ์, dev ์ฌ์ฉ์, prod ์ฌ์ฉ์ ๋ฑ
- ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ๊ฐ์ธ ํค ๊ฒฝ๋ก๋ฅผ ํฌํจ
๐ Contexts
- ํด๋ฌ์คํฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์กฐํฉ ์ ์
- ์: admin@production โ ์ด์ ํด๋ฌ์คํฐ๋ฅผ admin ๊ณ์ ์ผ๋ก ์ ๊ทผ
- ๊ฐ context๋ ํด๋ฌ์คํฐ ์ด๋ฆ, ์ฌ์ฉ์ ์ด๋ฆ, (์ ํ) namespace ํฌํจ
๐ ๋์ ์๋ฆฌ ์์ฝ
- kubectl ๋ช
๋ น ์ kubeconfig ์ฐธ์กฐ๋ก ํด๋น context ๊ธฐ๋ฐ ํด๋ฌ์คํฐ ์ ๊ทผ ์ํ
- ํด๋ฌ์คํฐ = ์๋ฒ ์ฃผ์, ์ฌ์ฉ์ = ์ธ์ฆ์ ์ ๋ณด, context = ๋์ ์กฐํฉ
- ๋ณ๋ ์ฌ์ฉ์ ์์ฑ์ด๋ ๊ถํ ๋ถ์ฌ ์์ด ๊ธฐ์กด ์ฌ์ฉ์ ์๊ฒฉ๋ง์ผ๋ก ์ค์ ๊ตฌ์ฑ ๊ฐ๋ฅ
๐ ์์: Kubeconfig ๊ตฌ์ฑ ๋จ๊ณ
- Clusters:
- ์ด๋ฆ: my-kube-playground
- ์๋ฒ ์ฃผ์: https://...
- CA ์ธ์ฆ์ ๊ฒฝ๋ก ํฌํจ
- Users:
- ์ด๋ฆ: my-kube-admin
- client-certificate ๋ฐ client-key ๊ฒฝ๋ก ํฌํจ
- Contexts:
- ์ด๋ฆ: my-kube-admin@my-kube-playground
- ํด๋ฌ์คํฐ: my-kube-playground
- ์ฌ์ฉ์: my-kube-admin
apiVersion: v1
kind: Config
clusters:
- name: my-kube-playground
cluster:
server: https://123.456.789.10:6443 # Kubernetes API ์๋ฒ ์ฃผ์
certificate-authority: /etc/kubernetes/pki/ca.crt # ํด๋ฌ์คํฐ ์ธ์ฆ์ ๊ฒฝ๋ก
users:
- name: my-kube-admin
user:
client-certificate: /etc/kubernetes/pki/admin.crt # ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๊ฒฝ๋ก
client-key: /etc/kubernetes/pki/admin.key # ํด๋ผ์ด์ธํธ ํค ๊ฒฝ๋ก
contexts:
- name: my-kube-admin@my-kube-playground
context:
cluster: my-kube-playground # ์ฌ์ฉํ ํด๋ฌ์คํฐ ์ด๋ฆ
user: my-kube-admin # ์ฌ์ฉํ ์ฌ์ฉ์ ์ด๋ฆ
namespace: default # (์ ํ) ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค ์ง์
current-context: my-kube-admin@my-kube-playground
๐ Context ์ ํ ๋ฐ ํ์ธ
- ํ์ฌ context ํ์ธ:
kubectl config view ๋ช
๋ น์ผ๋ก clusters, users, contexts ๋ฐ current-context ์กฐํ ๊ฐ๋ฅ
- context ์ ํ:
kubectl config use-context [context๋ช
] ๋ช
๋ น์ผ๋ก ํ์ฌ context ๋ณ๊ฒฝ ๊ฐ๋ฅ
โ ํ์ผ ๋ด current-context ํ๋์ ๋ฐ์๋จ
๐ ๏ธ Kubeconfig ํ์ผ ์ปค์คํฐ๋ง์ด์ง
- ๋ค์ํ
kubectl config ์๋ธ ๋ช
๋ น์ด๋ฅผ ํตํด context/user/cluster ํญ๋ชฉ ์ถ๊ฐยท์์ ยท์ญ์ ๊ฐ๋ฅ
- ๋ค์์ context๋ฅผ ๊ตฌ์ฑํ์ฌ ์ํฉ์ ๋ฐ๋ผ ๋น ๋ฅด๊ฒ ์ ํ ๊ฐ๋ฅ
๐งญ Namespace ์ง์
- ๊ฐ context๋ ๊ธฐ๋ณธ namespace ์ค์ ๊ฐ๋ฅ
- context ํญ๋ชฉ์
namespace: [๋ค์์คํ์ด์ค๋ช
] ํ๋ ์ถ๊ฐ ์, context ์ ํ ์ ์๋ ์ ์ฉ
๐ ์ธ์ฆ์ ์ค์ ๋ฐฉ์
- ์ธ์ฆ์ ํ์ผ ๊ฒฝ๋ก ์ง์ :
certificate-authority: /๊ฒฝ๋ก/ca.crt
- ์ธ์ฆ์ ๋ฐ์ดํฐ ์ง์ ํฌํจ:
certificate-authority-data: [Base64 ์ธ์ฝ๋ฉ๋ ์ธ์ฆ์]
โ ์ธ์ฆ์ ๋ด์ฉ์ base64๋ก ์ธ์ฝ๋ฉํ์ฌ YAML์ ์ง์ ํฌํจ ๊ฐ๋ฅ
- ๋ณตํธํ ์:
base64 --decode ๋ช
๋ น์ผ๋ก ์๋ณธ ์ธ์ฆ์ ๋ณต์ ๊ฐ๋ฅ
๐งช ์ค์ต ๊ถ์ฅ
- Kubeconfig๋ฅผ ์ค์ ์์ ํ์ฉํ๊ธฐ ์ํ ์ค์ต ์ฐ์ต ํ์
- ๋ค์ํ context ๊ตฌ์ฑ ๋ฐ ์ธ์ฆ ๋ฌธ์ ํด๊ฒฐ ๊ฒฝํ ์ถ์ ํ์
๐ ํต์ฌ ์์ฝ
- kubeconfig๋ ํด๋ฌ์คํฐ ์ ์์ ์ํ ์ธ์ฆ ์ ๋ณด์ context ์ ์ ํ์ผ
kubectl ๋ช
๋ น์ ๋์์ kubeconfig ํ์ผ์ ์ ์๋ context ๊ธฐ๋ฐ์ผ๋ก ์คํ
- ์ธ์ฆ ์ ๋ณด๋ ํ์ผ ๊ฒฝ๋ก๋ base64 ๋ฐ์ดํฐ๋ก ์ค์ ๊ฐ๋ฅ
- namespace, context, ์ธ์ฆ ์ ํ ๋ฑ์ ๋ชจ๋
kubectl config ๋ช
๋ น์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
โจ๏ธ ๋ช
๋ น์ด
$ kubectl config view
$ kubectl config --kubeconfig /file-to-path current-context
$ kubectl config --kubeconfig /file-to-path use-context <context_name>
# --kubeconfig ์ต์
์ฌ์ฉํ๊ณ ์ถ์ง ์๊ณ ์ฌ์ฉ์ ์ ์๋ก ์์ฑ๋ kubeconfig๋ฅผ default๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
$ vi ~/.bashrc // ํ๊ฒฝ๋ณ์ ์์
export KUBECONFIG=/file-to-path
$ source ~/.bashrc