How to install Kubernetes dashboard with NodePort
The Kubernetes dashboard is a web-based user interface that provides information about the status of Kubernetes cluster resources and any errors that may occur. Dashboards can be used to deploy containerized applications to a cluster, troubleshoot deployed applications, and perform general management of cluster resources.
The deployment of Deployment, StatefulSet, DaemonSet, Jobs, Services and Ingress can be done from the dashboard or terminal in the following ways kubectl. If you want to scale your deployment, start rolling updates, restart your Pod, create persistent volumes and persistent volume claims, you can do everything from the Kubernetes dashboard.
Step 1: Configure kubectl
We will deploy the dashboard to a Kubernetes cluster using the kubectl kubernetes management tool. You can configure kubectl using the guide below.
Easily manage multiple Kubernetes clusters with kubectl and kubectx
The guide in the link demonstrates how to configure and access multiple clusters using the same kubectl configuration file.
Step 2: Deploy the Kubernetes Dashboard
The default Dashboard deployment contains the minimum set of RBAC privileges required to run. You can deploy the Kubernetes dashboard using the following command.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
This will use the default values for deployment. If you want to make some modifications to the file, you must download it to your local computer.
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
mv recommended.yaml kubernetes-dashboard-deployment.yml
Modify the files to suit your deployment needs.
vim kubernetes-dashboard-deployment.yml
I changed the Kubernetes dashboard service to a NodePort type.
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
- Node port Services are exposed on each node’s IP through a static port (NodePort). The ClusterIP service to which the NodePort service is routed is automatically created.
Apply changes when done:
kubectl apply -f kubernetes-dashboard-deployment.yml
Check the deployment status:
$ kubectl get deployments -n kubernetes-dashboard
NAME READY UP-TO-DATE AVAILABLE AGE
dashboard-metrics-scraper 1/1 1 1 86s
kubernetes-dashboard 1/1 1 1 86s
Two Pods should be created-one for dashboards and one for metrics.
$ kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b64584c5c-xvtqp 1/1 Running 0 2m4s
kubernetes-dashboard-566f567dc7-w59rn 1/1 Running 0 2m4s
Since I changed the service type to NodePort, please confirm that the service was actually created.
$ kubectl get service -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.43.133.26 8000/TCP 2m59s
kubernetes-dashboard NodePort 10.43.150.245 443:30038/TCP 3m
Step 3: Visit the Kubernetes dashboard
My service deployment was assigned a port 30038/TCP protocol. Let us confirm that we can access the dashboard.
You need a token to access the dashboard, check out our guide:
How to create an admin user to access Kubernetes dashboard
Create a Kubernetes service / user account limited to one namespace
You should see a web dashboard similar to the one below.
Nginx entry:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: k8s-dashboard
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
tls:
- hosts:
- k8sdash.mydomain.com
secretName: tls-secret
rules:
- host: k8sdash.mydomain.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
Check out other Kubernetes guides:
Top minimal container operating system running Kubernetes
Installing a production Kubernetes cluster with Rancher RKE
Install Minikube Kubernetes on CentOS 8 / CentOS 7 using KVM
How to schedule Pods on Kubernetes control plane (master) node