kubeconfig

Yu Sang Minยท2025๋…„ 6์›” 16์ผ

CKA

๋ชฉ๋ก ๋ณด๊ธฐ
51/110

๐Ÿ” 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
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0๊ฐœ์˜ ๋Œ“๊ธ€