๋ชฉ์ฐจ
ย KubeConfig
ย Default Authentication
ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes REST API๋ฅผ ์ฟผ๋ฆฌํ๊ธฐ ์ํด curl์ ์ฌ์ฉํ ์ ์๋ค. API Server์ ๋ํ ์ฌ์ฉ์ ์ธ์ฆ์ ์ํด ์ธ์ฆ์์ ํค๋ฅผ ์ต์
์ผ๋ก ์ ๋ฌํ๋ค.
curl https://my-kube-playground:6443/api/v1/pods \
--key=admin.key --cert=admin.crt --cacert=ca.crt
Bash
๋ณต์ฌ
kubectl ๋ช
๋ น์ ์ด๋ป๊ฒ API Server์ ๋ํด ์ธ์ฆ๋ ์ ์์๊น?
curl์์ ์ ๋ฌํ ์ต์
๊ณผ ๊ฐ์ด ์ธ์ฆ์์ ํค๋ฅผ ์ต์
์ผ๋ก ์ ๊ณตํ ์ ์๋ค.
kubectl get pods \
--server my-kube-playground:6443 \
--client-key admin.key \
--client-certificate admin.crt \
--certificate-authority ca.crt
Bash
๋ณต์ฌ
ย KubeConfig
kubectl ๋ช
๋ น์ ์คํํ ๋๋ง๋ค ๋งค๋ฒ ์ธ์ฆ ๊ด๋ จ ์ต์
๋ค์ ์
๋ ฅํ๋ ๊ฒ์ ํ ํ์ผ์ ํตํด ํด๋ผ ์ ์๋ค. ๊ทธ ์ญํ ์ ์ํํ๋ ๊ฒ์ด kubeconfig์ด๋ค. kubeconfig ํ์ผ์๋ ์ต์
์ผ๋ก ์
๋ ฅํ๋ ๊ฐ๋ค์ด ์
๋ ฅ๋์ด kubectl ๋ช
๋ น์ ์ฌ์ฉํ ๋๋ ํด๋น config๋ฅผ ์ฌ์ฉํ๋ค๋ ์ต์
๋ง ๋ช
์ํ๋ฉด ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก kubectl์ $HOME/.kube/ ๋๋ ํ ๋ฆฌ ๋ด์ config๋ผ๋ ํ์ผ์ ์ฐพ๋๋ค. ํด๋น ์์น์ config ํ์ผ์ ์์นํด๋๋ฉด --kubeconfig ์ต์
์ ์ฃผ์ง ์์๋ ๋๋ค.
kubectl get pods --kubeconfig config
Bash
๋ณต์ฌ
# config
--server my-kube-playground:6443
--client-key admin.key
--client-certificate admin.crt
--certificate-authority ca.crt
Bash
๋ณต์ฌ
ย Structure and Role
kubeconfig ํ์ผ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ํ ์ ๊ทผ ์ ๋ณด๋ฅผ ๋ด๊ณ ์ด๋ ํน์ ํ์์ ํ์ผ์ด๋ค. ์ด ํ์ผ์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์น์
, clusters, users, contexts ์ผ๋ก ๋๋ ์ ์๋ค.
ย Cluster
clusters ์น์
์๋ ์ ๊ทผํด์ผ ํ๋ ๋ค์ํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ, ํ
์คํธ ํ๊ฒฝ, ํ๋ก๋์
ํ๊ฒฝ ๋ฑ ์ฌ๋ฌ ํด๋ฌ์คํฐ๊ฐ ์์ ์ ์์ผ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์กฐ์ง์ด๋ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ฐ๋ผ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ์๋ ์๋ค. ์ด ๋ชจ๋ ํด๋ฌ์คํฐ ์ ๋ณด๊ฐ ์ด ์น์
์ ๊ธฐ๋ก๋๋ค.
ย Users
users ์น์
์ ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ ์๋ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ด๋ฆฌ์์ธ admin user, ๊ฐ๋ฐ์์ธ dev user, ํ๋ก๋์
ํ๊ฒฝ์ prod user ๋ฑ์ด ์์ ์ ์๋ค. ๊ฐ ์ฌ์ฉ์๋ ์๋ก ๋ค๋ฅธ ํด๋ฌ์คํฐ์์ ์๋ก ๋ค๋ฅธ ๊ถํ์ ๊ฐ์ง ์ ์๋ค.
ย Contexts
contexts ์น์
์ ํด๋ฌ์คํฐ์ ์ฌ์ฉ์ ๊ณ์ ์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค. ๊ฐ context๋ ์ด๋ค ์ฌ์ฉ์ ๊ณ์ ์ด ์ด๋ค ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ง๋ฅผ ์ ์ํ๋ค. ์๋ฅผ ๋ค์ด, admin@production์ด๋ผ๋ ์ด๋ฆ์ context๋ฅผ ์์ฑํ์ฌ admin ๊ณ์ ์ ์ฌ์ฉํด ํ๋ก๋์
ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ ์๋ค. ๋๋ dev@google์ด๋ผ๋ context๋ก Google์ ์ค์ ํ ํด๋ฌ์คํฐ์ ๊ฐ๋ฐ์ ๊ณ์ ์ผ๋ก ์ ๊ทผํ์ฌ ๋ด๊ฐ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ์ ์๋ค.
Privileges
์ด ๊ณผ์ ์์ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ฑฐ๋ ํด๋ฌ์คํฐ ๋ด์์ ์ฌ์ฉ์ ์ ๊ทผ ๊ถํ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์๋๋ค. ์ด๋ฏธ ์กด์ฌํ๋ ์ฌ์ฉ์์ ๊ทธ ๊ถํ์ ์ฌ์ฉํด ์ด๋ค ์ฌ์ฉ์๊ฐ ์ด๋ค ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ง๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด kubectl ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ง๋ค ์ฌ์ฉ์ ์ธ์ฆ์์ ์๋ฒ ์ฃผ์๋ฅผ ๋ช
์ํ ํ์๊ฐ ์๋ค.
ย KubeConfig File
์์์ ์ฌ์ฉํ๋ ์ต์
์ config ํ์ผ๋ก ๊ตฌ์ฑํ๋ฉด ๊ฐ๊ฐ์ ์ต์
๋ค์ ์ด๋์ ๋ฐฐ์น๋์ด์ผ ํ ๊น?
--server my-kube-playground:6443
--client-key admin.key
--client-certificate admin.crt
--certificate-authority ca.crt
Bash
๋ณต์ฌ
โข
--server my-kube-playground:6443, --certificate-authority ca.crt ์ต์
์ Clusters ์น์
์ ๋ฐฐ์น๋๋ค
โข
--client-key admin.key, --client-certificate admin.crt ์ต์
์ Users ์น์
์ ๋ฐฐ์น๋๋ค
โข
๋ ๊ฐ์ ์ก์ธ์ค๋ฅผ ์ง์ ํ๊ธฐ ์ํด MyKubeAdmin@MyKubePlayground ๋ผ๋ ์ปจํ
์คํธ๋ฅผ ์์ฑํ ์ ์๋ค
์ด๋ฅผ yaml ํฌ๋งท์ kubeconfig ํ์ผ๋ก ๊ตฌ์ฑํ๋ฉด ์๋์ ๊ฐ๋ค:
apiVersion: v1
kind: Config
clusters:
- name: my-kube-playground
cluster:
certificate-authority: ca.crt
server: https://my-kube-playground:6443
contexts:
- name: my-kube-admin@my-kube-playground
context:
cluster: my-kube-playground
user: my-kube-admin
users:
- name: my-kube-admin
user:
client-certificate: admin.crt
client-key: admin.key
YAML
๋ณต์ฌ
kubeconfig ํ์ผ์ด ์ค๋น๋๋ฉด kubectl ๋ช
๋ น์ ์ํด ์ฝํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์์
์ ํ์ง ์์๋ ๋๋ค.
ย Context
kubectl์ ์ด๋ค context๋ฅผ ์ฌ์ฉํด์ผ ํ ์ง ์ด๋ป๊ฒ ํ๋จํ ๊น
ย Current-Context
Config ํ์ผ์ current-context ํ๋๋ฅผ ํตํด ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ context๋ฅผ ์ง์ ํ ์ ์๋ค.
# values hidden
apiVersion: v1
kind: Config
current-context: dev-user@google # ์ฌ์ฉํ Context ์ง์
clusters:
- name: my-kube-playground
- name: development
- name: production
- name: google
contexts:
- name: my-kube-admin@my-kube-playground
- name: dev-user@google
- name: prod-user@production
users:
- name: my-kube-admin
- name: admin
- name: dev-user
- name: prod-user
YAML
๋ณต์ฌ
ย Config View
kubectl config view ๋ช
๋ น์ ํตํด Cluster์ Context, User, ๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ค์ ๋ context๋ฅผ ํ์ธํ ์ ์๋ค. kubeconfig ํ์ผ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก $HOME/.kube/ ๋๋ ํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ผ์ ์ฌ์ฉํ๋ ๋ฐ, ๋ค๋ฅธ config ํ์ผ์ด ์๋ค๋ฉด --kubeconfig ์ต์
์ ์ฃผ์ด ๋ค๋ฅธ kubeconfig ํ์ผ์ ํ์ธํ ์๋ ์๋ค.
ย Use-Context
ํ์ฌ Context๋ฅผ ๋ค๋ฅธ Context๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํด์ use-context ๋ช
๋ น์ ์ฌ์ฉํด์ผ ํ๋ค. use-context๋ฅผ ์ฌ์ฉํด ๋ณ๊ฒฝ๋ Context๋ config ํ์ผ์ current-context์๋ ๋ฐ์๋๋ค.
kubectl config use-context <context>
Bash
๋ณต์ฌ
ย Namespaces
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ค์์คํ์ด์ค๋ก ๊ตฌ์ฑ๋ ์ ์๋ค. ๋ค์์คํ์ด์ค๋ ํด๋ฌ์คํฐ ๋ด์์ ๋ฆฌ์์ค๋ฅผ ๊ตฌ๋ถํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๋
ผ๋ฆฌ์ ๋จ์์ด๋ค. ๊ฐ ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ๋ค์์คํ์ด์ค๊ฐ ์ค์ ๋ ์ ์์ผ๋ฉฐ, ํน์ ๋ค์์คํ์ด์ค๋ก ์ ํํ๋ Context๋ฅผ ์ค์ ํ ์ ์๋ค.
Configuration
kubeconfig ํ์ผ์ contexts ์น์
์์ namespace๋ผ๋ ์ถ๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ํ๋์ ํน์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๋ฉด, ํด๋น ์ปจํ
์คํธ๋ก ์ ํํ ๋ ์๋์ผ๋ก ์ง์ ๋ ๋ค์์คํ์ด์ค๋ก ์ค์ ๋๋ค.
apiVersion: v1
kind: Config
...
contexts:
- name: admin@production
context:
cluster: production
user: admin
namespace: finance
...
YAML
๋ณต์ฌ
admin@production์ผ๋ก context๋ฅผ ์ ํํ๊ฒ ๋๋ฉด ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๊ฐ finance ๋ก ์ค์ ๋๋ค. ์ด๋ก ์ธํด kubectl ๋ช
๋ น์ด๋ฅผ ์คํํ ๋ ๋ณ๋์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ์ง ์์๋ finance ๋ค์์คํ์ด์ค์์ ์์
์ด ์ํ๋๋ค.
ย Certificates in KubeConfig
Path
kubeconfig์๋ ์ธ์ฆ์ ํ์ผ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ช
์ํ๋๋ฐ, ์๋ ๊ฒฝ๋ก๋ณด๋ค๋ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
Data
kubeconfig์ ์ธ์ฆ์๋ฅผ ๊ฒฝ๋ก ํํ๊ฐ ์๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์
๋ ฅํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ํ๋๋ certificate-authority ๋์ certificate-authority-data๋ฅผ ์ฌ์ฉํ๋ค.