Post

[Kubernetes] Dashboard ์„ค์น˜

[Kubernetes] Dashboard ์„ค์น˜

๐Ÿ“Œ 1. Kubernetes Dashboard๋ž€?

Kubernetes Dashboard๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์›น UI๋กœ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹ ์›น ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ:

  • Pod / Deployment / Service ์กฐํšŒ
  • ๋กœ๊ทธ ํ™•์ธ
  • ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ
  • RBAC ๊ธฐ๋ฐ˜ ์ธ์ฆ

๐Ÿ“ฆ 2. Dashboard ์„ค์น˜

๊ณต์‹ manifest๋ฅผ ์ด์šฉํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

๐Ÿ”Ž ์ƒ์„ฑ๋˜๋Š” ์ฃผ์š” ๋ฆฌ์†Œ์Šค

  • Namespace: kubernetes-dashboard
  • Deployment: kubernetes-dashboard
  • Deployment: dashboard-metrics-scraper
  • Service
  • ServiceAccount
  • Role / RoleBinding

์„ค์น˜ ํ™•์ธ:

1
kubectl get all -n kubernetes-dashboard

๐ŸŒ 3. Dashboard ์™ธ๋ถ€ ์ ‘์† (NodePort ๋ฐฉ์‹)

๊ธฐ๋ณธ์ ์œผ๋กœ Service ํƒ€์ž…์€ ClusterIP์ด๋ฏ€๋กœ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

1๏ธโƒฃ Service ํƒ€์ž… ๋ณ€๊ฒฝ

1
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

์•„๋ž˜ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 31000

์ €์žฅ ํ›„ ํ™•์ธ:

1
kubectl get svc -n kubernetes-dashboard

์˜ˆ์‹œ ์ถœ๋ ฅ:

1
kubernetes-dashboard   NodePort   10.97.112.43   443:31000/TCP

2๏ธโƒฃ ๋ธŒ๋ผ์šฐ์ € ์ ‘์†

1
https://<NodeIP>:31000

โš ๏ธ Self-signed ์ธ์ฆ์„œ์ด๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ” 4. ๊ด€๋ฆฌ์ž ๊ณ„์ • ๋ฐ ํ† ํฐ ์ƒ์„ฑ

Dashboard๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Token ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ServiceAccount ์ƒ์„ฑ

1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
1
kubectl apply -f admin-user.yaml

2๏ธโƒฃ ClusterRoleBinding ์ƒ์„ฑ

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard
1
kubectl apply -f cluster-role-binding.yaml

3๏ธโƒฃ ํ† ํฐ ์ƒ์„ฑ

1
kubectl -n kubernetes-dashboard create token admin-user

์ถœ๋ ฅ๋œ ํ† ํฐ์„ ๋ณต์‚ฌํ•˜์—ฌ Dashboard ๋กœ๊ทธ์ธ ํ™”๋ฉด์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.


โš ๏ธ 5. ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ

๐Ÿ”ธ 1. NET::ERR_CERT_INVALID

  • Self-signed ์ธ์ฆ์„œ๋กœ ์ธํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ฒฝ๊ณ 
  • ์‹ค์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” Ingress + TLS ๊ตฌ์„ฑ ๊ถŒ์žฅ

๐Ÿ”ธ 2. ๊ถŒํ•œ ๊ด€๋ จ ์—๋Ÿฌ

  • Forbidden ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ RBAC ํ™•์ธ
  • ์‹ค ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” cluster-admin ๋Œ€์‹  ์ตœ์†Œ ๊ถŒํ•œ Role ์‚ฌ์šฉ ๊ถŒ์žฅ

๐Ÿ” ๋ณด์•ˆ ๊ด€์ ์—์„œ์˜ ์ฃผ์˜์‚ฌํ•ญ

์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ:

  • โŒ NodePort ์ง์ ‘ ์˜คํ”ˆ์€ ์ง€์–‘
  • โœ… Ingress + ์ธ์ฆ์„œ(TLS) ์ ์šฉ
  • โœ… OIDC / SSO ์—ฐ๋™ ๊ณ ๋ ค
  • โœ… ์ตœ์†Œ ๊ถŒํ•œ RBAC ๊ตฌ์„ฑ

๐Ÿง  ๊ฐœ๋ฐœ์ž ๊ด€์  ์ •๋ฆฌ

ํ•ญ๋ชฉDev ํ™˜๊ฒฝ์šด์˜ ํ™˜๊ฒฝ
Service ํƒ€์ž…NodePortIngress
์ธ์ฆAdmin TokenOIDC / SSO
๊ถŒํ•œcluster-admin์ตœ์†Œ ๊ถŒํ•œ
์ธ์ฆ์„œSelf-signed๊ณต์ธ TLS

๐Ÿ ๋งˆ๋ฌด๋ฆฌ

Kubernetes Dashboard๋Š”:

  • ๋น ๋ฅด๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ 
  • ๋ฆฌ์†Œ์Šค ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•˜์ง€๋งŒ
  • ๋ณด์•ˆ ์„ค์ • ์—†์ด ์šด์˜ ํ™˜๊ฒฝ์— ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

Dev/Test ํ™˜๊ฒฝ์—์„œ๋Š” ๋น ๋ฅธ ์‹ค์Šต์šฉ์œผ๋กœ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ ๊ตฌ์„ฑ์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”.


This post is licensed under CC BY 4.0 by the author.