Di episode ini kita akan coba bahas Kubernetes Dashboard untuk managing cluster melalui web UI. Kita akan mempelajari cara install Dashboard v2.7.0, create admin user, access dashboard, dan best practice untuk secure dashboard deployment.

Catatan
Untuk kalian yang ingin membaca episode sebelumnya, bisa click thumbnail episode 27 di bawah ini
Di episode sebelumnya kita sudah belajar tentang StatefulSet untuk managing stateful application dengan stable identity dan persistent storage. Selanjutnya di episode 28 kali ini, kita akan coba bahas Kubernetes Dashboard, web-based UI untuk managing dan monitoring Kubernetes cluster kalian.
Catatan: Disini saya akan menggunakan Kubernetes Cluster yang di install melalui K3s.
Sementara kubectl powerful untuk command-line management, Kubernetes Dashboard menyediakan visual interface untuk viewing cluster resource, deploying application, troubleshooting issue, dan monitoring workload - making cluster management lebih accessible.
Kubernetes Dashboard adalah general-purpose, web-based UI untuk Kubernetes cluster. Dia allow user untuk manage application running di cluster, troubleshoot application, dan manage cluster resource.
Bayangkan Dashboard seperti control panel untuk cluster kalian - instead of typing command, kalian bisa click through resource, view log, edit configuration, dan monitor health melalui intuitive interface.
Fitur kunci Kubernetes Dashboard:
Dashboard solve beberapa challenge:
Tanpa Dashboard, kalian rely entirely on kubectl, yang bisa challenging untuk beginner atau team preferring visual interface.
Mari kita install Dashboard v2.7.0 step by step.
Apply official Dashboard manifest:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlIni create:
kubernetes-dashboardkubernetes-dashboardkubernetes-dashboardCheck Dashboard pod:
kubectl get pods -n kubernetes-dashboardOutput:
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5cb4f4bb9c-xxxxx 1/1 Running 0 1m
kubernetes-dashboard-79cbcf9fb6-xxxxx 1/1 Running 0 1mCheck Dashboard service:
kubectl get svc -n kubernetes-dashboardOutput:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.43.xxx.xxx <none> 8000/TCP 1m
kubernetes-dashboard ClusterIP 10.43.xxx.xxx <none> 443/TCP 1mDashboard require authentication. Create ServiceAccount dengan admin privilege.
Create dashboard-admin.yml:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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-dashboardApply configuration:
kubectl apply -f dashboard-admin.ymlWarning
Security Warning: Ini create user dengan cluster-admin privilege. Untuk production, gunakan more restrictive RBAC role.
Create token untuk admin user:
kubectl -n kubernetes-dashboard create token admin-userOutput (contoh):
eyJhbGciOiJSUzI1NiIsImtpZCI6IjRxN3Z...very-long-token...xyz123Copy token ini - kalian akan need it untuk log in ke Dashboard.
Catatan
Token created dengan create token adalah short-lived (default 1 jam). Untuk long-lived token, create Secret manually.
Ada beberapa cara untuk access Dashboard:
Forward Dashboard service ke localhost:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443Access Dashboard di: https://localhost:8443
Kubernetes Dashboard Login
Kubernetes Dashboard WorkloadEdit Dashboard service:
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboardChange type: ClusterIP ke type: NodePort:
spec:
type: NodePort # Changed dari ClusterIP
ports:
- port: 443
targetPort: 8443
nodePort: 30443 # Optional: specify portGet NodePort:
kubectl get svc -n kubernetes-dashboardAccess Dashboard di: https://<node-ip>:<node-port>
Create Ingress resource:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- dashboard.example.com
secretName: dashboard-tls
rules:
- host: dashboard.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443Kalian sekarang logged in ke Kubernetes Dashboard!
Cluster:
Workload:
Service:
Config and Storage:
Custom Resource:
Navigate ke any resource type:
Contoh form deployment:
App name: nginx-app
Container image: nginx:1.25
Number of pods: 3
Service: External (NodePort)
Port: 80
Target port: 80Untuk persistent access, create Secret-based token.
apiVersion: v1
kind: Secret
metadata:
name: admin-user-token
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-tokenApply:
kubectl apply -f admin-user-secret.ymlkubectl get secret admin-user-token -n kubernetes-dashboard -o jsonpath="{.data.token}" | base64 --decodeToken ini tidak expire dan bisa used untuk long-term access.
Untuk user yang should only view resource:
apiVersion: v1
kind: ServiceAccount
metadata:
name: readonly-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: readonly-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: readonly-user
namespace: kubernetes-dashboardApply:
kubectl apply -f dashboard-readonly.ymlGenerate token:
kubectl -n kubernetes-dashboard create token readonly-userUntuk user limited ke specific namespace:
apiVersion: v1
kind: ServiceAccount
metadata:
name: dev-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-user
namespace: development
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- kind: ServiceAccount
name: dev-user
namespace: kubernetes-dashboardUser ini hanya bisa access development namespace.
Check pod status:
kubectl get pods -n kubernetes-dashboardView pod log:
kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboardDescribe pod:
kubectl describe pod -n kubernetes-dashboard <pod-name>Check service:
kubectl get svc -n kubernetes-dashboard
kubectl describe svc kubernetes-dashboard -n kubernetes-dashboardVerify port-forward running:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443Verify ServiceAccount exist:
kubectl get sa admin-user -n kubernetes-dashboardVerify ClusterRoleBinding:
kubectl get clusterrolebinding admin-userGenerate new token:
kubectl -n kubernetes-dashboard create token admin-userDashboard gunakan self-signed certificate by default. Untuk production:
apiVersion: v1
kind: Secret
metadata:
name: kubernetes-dashboard-certs
namespace: kubernetes-dashboard
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-cert>
tls.key: <base64-encoded-key>Problem: Giving everyone full cluster access.
Solusi: Create role-specific user:
# Read-only user
roleRef:
kind: ClusterRole
name: view
# Edit user (no delete)
roleRef:
kind: ClusterRole
name: editProblem: Dashboard accessible dari internet tanpa proper security.
Solusi: Gunakan salah satu approach ini:
Problem: Dashboard pod bisa consume unlimited resource.
Solusi: Edit deployment untuk add limit:
kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboardAdd:
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"Problem: Token expire setelah 1 jam.
Solusi: Create Secret-based token untuk automation:
apiVersion: v1
kind: Secret
metadata:
name: admin-user-token
annotations:
kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-tokenProblem: No audit trail Dashboard usage.
Solusi: Enable audit logging di Kubernetes API server dan monitor Dashboard access pattern.
Gunakan strong authentication:
# Minimum privilege principle
roleRef:
kind: ClusterRole
name: view # Not cluster-adminSecure Dashboard dengan proper certificate:
spec:
tls:
- hosts:
- dashboard.example.com
secretName: dashboard-tls-certRestrict Dashboard network access:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dashboard-access
namespace: kubernetes-dashboard
spec:
podSelector:
matchLabels:
k8s-app: kubernetes-dashboard
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx
ports:
- protocol: TCP
port: 8443Prevent resource exhaustion:
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"Create role-specific user:
# Admin user - full access
# Developer user - namespace-specific
# Viewer user - read-onlyRotate token periodically:
# Delete old token
kubectl delete secret admin-user-token -n kubernetes-dashboard
# Create new token
kubectl apply -f admin-user-secret.ymlTrack who access Dashboard dan what they do:
kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboardRegularly update ke latest version:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlSementara Dashboard official, consider alternative:
Lens:
K9s:
Octant:
Rancher:
kubectl get all -n kubernetes-dashboardkubectl get deployment kubernetes-dashboard -n kubernetes-dashboard -o jsonpath="{.spec.template.spec.containers[0].image}"kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboard -fkubectl describe svc kubernetes-dashboard -n kubernetes-dashboardkubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlkubectl delete -f dashboard-admin.ymlkubectl delete namespace kubernetes-dashboardPada episode 28 ini, kita telah membahas Kubernetes Dashboard secara mendalam. Kita sudah belajar cara install Dashboard v2.7.0, create admin user, access dashboard securely, dan manage cluster resource melalui web interface.
Key takeaway:
kubectl apply commandKubernetes Dashboard make cluster management accessible melalui intuitive web interface. Dengan memahami Dashboard installation dan security best practice, kalian bisa provide team dengan visual cluster management sambil maintaining proper access control.
Bagaimana, makin jelas kan tentang Kubernetes Dashboard? Jadi, pastikan tetap semangat belajar dan nantikan episode selanjutnya!
Catatan
Untuk kalian yang ingin melanjutkan ke episode selanjutnya, bisa click thumbnail episode 29 di bawah ini