[k8s] headlamp

headlamp๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ Web UI๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํŽธ์˜์„ฑ ๋Œ€์‹œ๋ณด๋“œ๋‹ค.

์›๋ž˜ kubernetes-dashboard๋ผ๋Š” ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๊ด€๋ฆฌ ์ค‘๋‹จ๋˜๊ณ  ๋‚˜์„œ๋Š” ์ด๊ฒŒ ๋Œ€์ฒด์žฌ๋กœ์„œ ๊ถŒ์žฅ๋œ๋‹ค.




์„ค์น˜

helm์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ๋ฒ„ ๋ฐ–์—๋„ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ, ๋Œ€์ฒด๋กœ๋Š” ๊ทธ๋ƒฅ ์ฟ ๋ฒ„ ๋‚ด์— ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.

helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
helm install headlamp headlamp/headlamp --namespace kube-system

์„ค์น˜ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๋น„์ €๋‹ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl get all -l "app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=headlamp" -n kube-system

์ด๋ ‡๊ฒŒ ๋œจ๋ฉด ๋‹ค ์ž˜ ๋œ ๊ฒƒ์ด๋‹ค.

์„œ๋น„์Šค๋ฅผ ์ ๋‹นํžˆ ์™ธ๋ถ€ ๊ฐœ๋ฐฉ ํ•ด์ฃผ๊ณ  ์“ฐ๋ฉด ๋œ๋‹ค.

kubectl patch svc headlamp -n kube-system --type=json -p='[{"op": "replace", "path": "/spec/ports", "value": [{"name":"default", "port":17200, "targetPort": 4266, "protocol": "TCP"}]}]'
kubectl patch svc headlamp -n kube-system -p '{"spec": {"type":"ClusterIP", "externalIPs": ["192.168.0.8"]}}'




์‚ฌ์šฉ๋ฒ•

Service ์—”๋“œํฌ์ธํŠธ๋กœ ์ง„์ž…ํ•˜๋ฉด ๋จผ์ € ํ† ํฐ์„ ์น˜๋ผ๊ณ  ํ•  ๊ฒƒ์ด๋‹ค.

๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ, ์ฟ ๋ฒ„๋กœ ํ† ํฐ์„ ๋ฝ‘์•„๋‚ด๊ณ , ๊ทธ๊ฑธ ์ž…๋ ฅํ•ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค.

kubectl create token headlamp --namespace kube-system --duration=8760h

์„ฑ๊ณต์ ์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ์— ์ง„์ž…ํ–ˆ๋‹ค๋ฉด, ์ด๋Ÿฐ ๋ฉ”์ธํŽ˜์ด์ง€์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€๋žต์ ์ธ ๋ฉ”ํŠธ๋ฆญ๊ณผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ๋‚˜์—ดํ•ด์ค€๋‹ค.


๋…ธ๋“œ ๋ชฉ๋ก๋„ ๋ณผ ์ˆ˜ ์žˆ๊ณ 


๋ฆฌ์†Œ์Šค๋„ ํƒ€์ž…๋ณ„๋กœ ๊ณจ๋ผ์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


deployment์˜ ๊ฒฝ์šฐ


deploy์— ์†ํ•œ pod๋„ ๋ชจ์•„๋ณผ ์ˆ˜ ์žˆ๊ณ 


๊ฐ๊ฐ์˜ pod์— ๋Œ€ํ•œ ๋ฉ”ํŠธ๋ฆญ, ๋กœ๊ทธ, ์ปจํ…Œ์ด๋„ˆ ์ •๋ณด๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฆ‰์‹œ yaml์„ ํŽธ์ง‘ํ•ด์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ณ 


yaml ๋„ฃ์–ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹ ๊ทœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.




Read-Only ๊ณ„์ • ๋งŒ๋“ค๊ธฐ

headlamp์˜ ๊ธฐ๋ณธ๊ณ„์ •์€ ์–ด๋“œ๋ฏผ์ด๋‹ค.
๋งŒ์•ฝ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ ๋ทฐ์–ด ๊ณ„์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด role์„ ์ •์˜ํ•˜๊ณ 

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: headlamp-readonly
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
kubectl apply -f role.yaml

๊ณ„์ •์„ ๋งŒ๋“ค์–ด์„œ ๋ถ™์ธ๋‹ค.


apiVersion: v1
kind: Secret
metadata:
  name: headlamp-readonly-token
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: headlamp-readonly
type: kubernetes.io/service-account-token
# Read-only ๊ณ„์ •
kubectl create serviceaccount headlamp-readonly -n kube-system
kubectl create clusterrolebinding headlamp-read-only-binding \
  --clusterrole=headlamp-readonly \
  --serviceaccount=kube-system:headlamp-readonly \
  -n kube-system

kubectl apply -f headlamp-readonly-token.yaml
kubectl get secret headlamp-readonly-token -n kube-system -o jsonpath='{.data.token}' | base64 -d

๊ทธ๋ฆฌ๊ณ  ๋ฐ›์€ ํ† ํฐ์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์„œ ์“ฐ๊ธฐ ์ž‘์—…์„ ์‹œ๋„ํ•ด๋ณด๋ฉด, ์ „๋ถ€ ๋ง‰ํ˜€์žˆ์„ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://headlamp.dev/#download-platforms
https://github.com/kubernetes-sigs/headlamp