[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