{"id":16768,"date":"2023-05-22T09:01:33","date_gmt":"2023-05-22T06:01:33","guid":{"rendered":"https:\/\/kifarunix.com\/?p=16768"},"modified":"2024-03-10T09:12:20","modified_gmt":"2024-03-10T06:12:20","slug":"install-kubernetes-dashboard-on-ubuntu","status":"publish","type":"post","link":"https:\/\/kifarunix.com\/install-kubernetes-dashboard-on-ubuntu\/","title":{"rendered":"Easy Way to Install Kubernetes Dashboard on Ubuntu 22.04\/20.04"},"content":{"rendered":"\n<p>This step-by-step guide provides an easy way to install Kubernetes dashboard on Ubuntu 22.04\/20.04. Installing <a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kubernetes<\/a> Dashboard on Ubuntu 22.04\/20.04 is a simple process that allows you to manage and monitor your Kubernetes clusters efficiently.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ul><li><a href=\"#installing-kubernetes-dashboard-on-ubuntu-22-04-20-04\">Installing Kubernetes Dashboard on Ubuntu 22.04\/20.04<\/a><ul><li><a href=\"#prerequisites\">Prerequisites<\/a><\/li><li><a href=\"#installing-kubernetes-dashboard-on-cluster-master-node\">Installing Kubernetes Dashboard on Cluster Master Node<\/a><\/li><li><a href=\"#verify-dashboard-installation\">Verify Dashboard Installation<\/a><\/li><li><a href=\"#expose-kubernetes-dashboard-for-external-access\">Expose Kubernetes Dashboard for External Access<\/a><\/li><li><a href=\"#create-kubernetes-dashboard-admin-user-account\">Create Kubernetes Dashboard Admin User Account<\/a><\/li><li><a href=\"#generate-access-token\">Generate Access Token<\/a><\/li><li><a href=\"#accessing-kubernetes-dashboard\">Accessing Kubernetes Dashboard<\/a><\/li><li><a href=\"#install-metrics-server\">Install Metrics Server<\/a><\/li><\/ul><\/li><li><a href=\"#other-tutorials\">Other Tutorials<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"installing-kubernetes-dashboard-on-ubuntu-22-04-20-04\">Installing Kubernetes Dashboard on Ubuntu 22.04\/20.04<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prerequisites\">Prerequisites<\/h3>\n\n\n\n<p>In order to install Kubernetes dashboard, you need to have a function Kubernetes cluster.<\/p>\n\n\n\n<p>You can check our previous guide on how to setup a Kubernetes cluster on Ubuntu.<\/p>\n\n\n\n<p><a href=\"https:\/\/kifarunix.com\/setup-kubernetes-cluster-on-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">Setup Kubernetes Cluster on Ubuntu 22.04\/20.04<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"installing-kubernetes-dashboard-on-cluster-master-node\">Installing Kubernetes Dashboard on Cluster Master Node<\/h3>\n\n\n\n<p>If you have a multi-node cluster, it is recommended to install Kubernetes dashboard from the control plane.<\/p>\n\n\n\n<p>Therefore, on the K8s cluster master node, run the command below to install Kubernetes dashboard.<\/p>\n\n\n\n<p>Replace the value of the VER variable with the <a href=\"https:\/\/github.com\/kubernetes\/dashboard\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">current release version<\/a> of Kubernetes dashboard.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>VER=2.7.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>VER=2.7.0 &amp;&amp; kubectl apply -f \\\nhttps:&#47;&#47;raw.githubusercontent.com\/kubernetes\/dashboard\/v${VER}\/aio\/deploy\/recommended.yaml<\/code><\/pre>\n\n\n\n<p>Sample installation output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>\nnamespace\/kubernetes-dashboard created\nserviceaccount\/kubernetes-dashboard created\nservice\/kubernetes-dashboard created\nsecret\/kubernetes-dashboard-certs created\nsecret\/kubernetes-dashboard-csrf created\nsecret\/kubernetes-dashboard-key-holder created\nconfigmap\/kubernetes-dashboard-settings created\nrole.rbac.authorization.k8s.io\/kubernetes-dashboard created\nclusterrole.rbac.authorization.k8s.io\/kubernetes-dashboard created\nrolebinding.rbac.authorization.k8s.io\/kubernetes-dashboard created\nclusterrolebinding.rbac.authorization.k8s.io\/kubernetes-dashboard created\ndeployment.apps\/kubernetes-dashboard created\nservice\/dashboard-metrics-scraper created\ndeployment.apps\/dashboard-metrics-scraper created\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"verify-dashboard-installation\">Verify Dashboard Installation<\/h3>\n\n\n\n<p>The dashboard installation command will created Pods related to Kubernetes dashboard and dashboard metrics under a namespace called <code><strong>kubernetes-dashboard<\/strong><\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get namespaces<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>\nNAME                   STATUS   AGE\ncalico-apiserver       Active   17h\ncalico-system          Active   17h\ndefault                Active   18h\nkube-node-lease        Active   18h\nkube-public            Active   18h\nkube-system            Active   18h\nkubernetes-dashboard   Active   3m33s\ntigera-operator        Active   17h\n<\/code><\/pre>\n\n\n\n<p>You can view the pods in this namespace as follows;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get pods -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>\nNAME                                         READY   STATUS    RESTARTS   AGE\ndashboard-metrics-scraper-5cb4f4bb9c-k2fjk   1\/1     Running   0          2m46s\nkubernetes-dashboard-6967859bff-qtm52        1\/1     Running   0          2m46s\n<\/code><\/pre>\n\n\n\n<p>If you want to find out on which node a pod is running, use -o wide option.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get pods -n kubernetes-dashboard -o wide<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>\nNAME                                         READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES\ndashboard-metrics-scraper-5cb4f4bb9c-qj4cx   1\/1     Running   0          44m   10.100.196.133   node01   &lt;none&gt;           &lt;none&gt;\nkubernetes-dashboard-6967859bff-2ftjt        1\/1     Running   0          44m   10.100.186.197   node03   &lt;none&gt;           &lt;none&gt;\n<\/code><\/pre>\n\n\n\n<p>You can get more details about the Kubernetes dashboard by running the command below;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl describe pod kubernetes-dashboard-6967859bff-qtm52 -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>\nName:             kubernetes-dashboard-6967859bff-qtm52\nNamespace:        kubernetes-dashboard\nPriority:         0\nService Account:  kubernetes-dashboard\nNode:             node01\/192.168.56.120\nStart Time:       Sun, 21 May 2023 13:15:52 +0000\nLabels:           k8s-app=kubernetes-dashboard\n                  pod-template-hash=6967859bff\nAnnotations:      cni.projectcalico.org\/containerID: 60184809005e6b9197f13b6587042b10ff659f6a55e5e56ff71c0d77aa5ab168\n                  cni.projectcalico.org\/podIP: 10.100.196.132\/32\n                  cni.projectcalico.org\/podIPs: 10.100.196.132\/32\nStatus:           Running\nSeccompProfile:   RuntimeDefault\nIP:               10.100.196.132\nIPs:\n  IP:           10.100.196.132\nControlled By:  ReplicaSet\/kubernetes-dashboard-6967859bff\nContainers:\n  kubernetes-dashboard:\n    Container ID:  containerd:\/\/f6055806fbe4dcbcd94c30201b3c8bfab1c536e4b5ba5e5dc17cfbf247e8ae46\n    Image:         kubernetesui\/dashboard:v2.7.0\n    Image ID:      docker.io\/kubernetesui\/dashboard@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93\n    Port:          8443\/TCP\n    Host Port:     0\/TCP\n    Args:\n      --auto-generate-certificates\n      --namespace=kubernetes-dashboard\n    State:          Running\n      Started:      Sun, 21 May 2023 13:16:45 +0000\n    Ready:          True\n    Restart Count:  0\n    Liveness:       http-get https:\/\/:8443\/ delay=30s timeout=30s period=10s #success=1 #failure=3\n    Environment:    <none>\n    Mounts:\n      \/certs from kubernetes-dashboard-certs (rw)\n      \/tmp from tmp-volume (rw)\n      \/var\/run\/secrets\/kubernetes.io\/serviceaccount from kube-api-access-667hl (ro)\nConditions:\n  Type              Status\n  Initialized       True \n  Ready             True \n  ContainersReady   True \n  PodScheduled      True \nVolumes:\n  kubernetes-dashboard-certs:\n    Type:        Secret (a volume populated by a Secret)\n    SecretName:  kubernetes-dashboard-certs\n    Optional:    false\n  tmp-volume:\n    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)\n    Medium:     \n    SizeLimit:  <unset>\n  kube-api-access-667hl:\n    Type:                    Projected (a volume that contains injected data from multiple sources)\n    TokenExpirationSeconds:  3607\n    ConfigMapName:           kube-root-ca.crt\n    ConfigMapOptional:       <nil>\n    DownwardAPI:             true\nQoS Class:                   BestEffort\nNode-Selectors:              kubernetes.io\/os=linux\nTolerations:                 node-role.kubernetes.io\/master:NoSchedule\n                             node.kubernetes.io\/not-ready:NoExecute op=Exists for 300s\n                             node.kubernetes.io\/unreachable:NoExecute op=Exists for 300s\nEvents:\n  Type    Reason     Age    From               Message\n  ----    ------     ----   ----               -------\n  Normal  Scheduled  6m6s   default-scheduler  Successfully assigned kubernetes-dashboard\/kubernetes-dashboard-6967859bff-qtm52 to node01\n  Normal  Pulling    6m4s   kubelet            Pulling image \"kubernetesui\/dashboard:v2.7.0\"\n  Normal  Pulled     5m13s  kubelet            Successfully pulled image \"kubernetesui\/dashboard:v2.7.0\" in 50.912542693s (50.912558356s including waiting)\n  Normal  Created    5m13s  kubelet            Created container kubernetes-dashboard\n  Normal  Started    5m13s  kubelet            Started container kubernetes-dashboard\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"expose-kubernetes-dashboard-for-external-access\">Expose Kubernetes Dashboard for External Access<\/h3>\n\n\n\n<p>The installation of Kubernetes dashboard also creates a service that is responsible for exposing Kubernetes dashboard application on the network.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get services -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE\ndashboard-metrics-scraper   ClusterIP   10.109.231.10    &lt;none&gt;        8000\/TCP   12m\nkubernetes-dashboard        ClusterIP   10.110.200.227   &lt;none&gt;        443\/TCP    12m<\/code><\/pre>\n\n\n\n<p>There are different ways in which <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/#publishing-services-service-types\" target=\"_blank\" rel=\"noreferrer noopener\">Kubernetes service <\/a>can expose an application on the network. The most common ones;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>ClusterIP<\/code><\/strong>&nbsp;\u2013 This is the default type of service and exposes the application on an internal IP address in the cluster. This type of service is only reachable from within the cluster.<\/li>\n\n\n\n<li><strong><code>NodePort<\/code><\/strong>&nbsp;\u2013 This type of service exposes the application on the same port of each selected Node in the cluster using NAT. This makes the service accessible from outside the cluster using&nbsp;<code>&lt;NodeIP&gt;:&lt;NodePort&gt;<\/code>. The default NodePort range is 30000-32767.<\/li>\n\n\n\n<li><strong><code>LoadBalancer<\/code><\/strong>&nbsp;\u2013 This type of service creates an external load balancer in the current cloud (if supported) and assigns a fixed, external IP to the service. This makes the service accessible from outside the cluster using the external IP address. The external IP address is assigned by the cloud provider and is not managed by Kubernetes.<\/li>\n<\/ul>\n\n\n\n<p>By default, Kubernetes dashboard is exposed via ClusterIP service type and hence, can only be accessed within the cluster.<\/p>\n\n\n\n<p>In order for use to easily access Kubernetes dashboard, I will reconfigure the service to expose the application via the <strong><code>NodePort<\/code><\/strong> service type.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl edit service kubernetes-dashboard -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<p>By default, this is how the Kubernetes dashboard is set;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>\n# Please edit the object below. Lines beginning with a '#' will be ignored,\n# and an empty file will abort the edit. If an error occurs while saving this file will be\n# reopened with the relevant failures.\n#\napiVersion: v1\nkind: Service\nmetadata:\n  annotations:\n    kubectl.kubernetes.io\/last-applied-configuration: |\n      {\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"k8s-app\":\"kubernetes-dashboard\"},\"name\":\"kubernetes-dashboard\",\"namespace\":\"kubernetes-dashboard\"},\"spec\":{\"ports\":[{\"port\":443,\"targetPort\":8443}],\"selector\":{\"k8s-app\":\"kubernetes-dashboard\"}}}\n  creationTimestamp: \"2023-05-21T13:15:52Z\"\n  labels:\n    k8s-app: kubernetes-dashboard\n  name: kubernetes-dashboard\n  namespace: kubernetes-dashboard\n  resourceVersion: \"28313\"\n  uid: c70844c4-3795-4491-9986-3dab8c1090d2\nspec:\n  clusterIP: 10.110.200.227\n  clusterIPs:\n  - 10.110.200.227\n  internalTrafficPolicy: Cluster\n  ipFamilies:\n  - IPv4\n  ipFamilyPolicy: SingleStack\n  ports:\n  - port: 443\n    protocol: TCP\n    targetPort: 8443\n  selector:\n    k8s-app: kubernetes-dashboard\n  sessionAffinity: None\n  type: ClusterIP\nstatus:\n  loadBalancer: {}\n<\/code><\/pre>\n\n\n\n<p>We will update this service and change the service type from <strong><code>ClusterIP<\/code><\/strong> to <strong><code>NodePort<\/code><\/strong> and bind it to static Node port.<\/p>\n\n\n\n<p>Under <strong>spec:<\/strong> section, we added;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>nodePort: 30001<\/code><\/strong> under ports.<\/li>\n\n\n\n<li>changed <strong><code>type: ClusterIP<\/code><\/strong> to <strong><code>type: NodePort<\/code><\/strong>.<\/li>\n<\/ul>\n\n\n\n<pre class=\"scroll-box\"><code>\n...\nspec:\n  clusterIP: 10.110.200.227\n  clusterIPs:\n  - 10.110.200.227\n  internalTrafficPolicy: Cluster\n  ipFamilies:\n  - IPv4\n  ipFamilyPolicy: SingleStack\n  ports:\n  - port: 443\n    protocol: TCP\n    targetPort: 8443\n    <strong>nodePort: 30001<\/strong>\n  selector:\n    k8s-app: kubernetes-dashboard\n  sessionAffinity: None\n  <strong>type: NodePort<\/strong>\nstatus:\n  loadBalancer: {}\n<\/code><\/pre>\n\n\n\n<p>Be sure not to assign a node port that is already being used by a service in the cluster.<\/p>\n\n\n\n<p>You can check which Node ports are currently in use using the command below;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get services --all-namespaces -o jsonpath='{range .items&#91;*]}{.spec.ports&#91;*].nodePort}{\"\\n\"}{end}'<\/code><\/pre>\n\n\n\n<p>Save and exit the service.<\/p>\n\n\n\n<p>The changes will be applied automatically. You can confirm by checking the service again;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get services -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>\nNAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE\ndashboard-metrics-scraper   ClusterIP   10.109.231.10    &lt;none&gt;        8000\/TCP        44m\nkubernetes-dashboard        NodePort    10.110.200.227   &lt;none&gt;        443:30001\/TCP   44m\n<\/code><\/pre>\n\n\n\n<p>The type has now changed to NodePort and the internal port 443 is mapped to port 30001\/tcp which can be accessed via any cluster nodes&#8217; IPs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-kubernetes-dashboard-admin-user-account\">Create Kubernetes Dashboard Admin User Account<\/h3>\n\n\n\n<p>Create user and assign admin riles<\/p>\n\n\n\n<p>Kubernetes dashboard doesn&#8217;t come with default user account. To create an admin user account, create a service account manifest file as follows;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vim kubernetes-dashboard-admin-user.yml<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: admin-user\n  namespace: kubernetes-dashboard\n---\napiVersion: rbac.authorization.k8s.io\/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: admin-user\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: cluster-admin\nsubjects:\n- kind: ServiceAccount\n  name: admin-user\n  namespace: kubernetes-dashboard\n<\/code><\/pre>\n\n\n\n<p>Create the account;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f kubernetes-dashboard-admin.yml<\/code><\/pre>\n\n\n\n<p>You can list service accounts using the command below;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get serviceaccounts -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"generate-access-token\">Generate Access Token<\/h3>\n\n\n\n<p>A service account requires a token that can be used to login to Kubernetes dashboard. To generate a token for the <code><strong>dashadmin<\/strong><\/code> service account we created above, run the command below;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create token admin-user -n kubernetes-dashboard<\/code><\/pre>\n\n\n\n<p>You will get get such a string;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eyJhbGciOiJSUzI1NiIsImtpZCI6IkVad2xuTHZFb0RSZ3VxazJObHRUeUpTV1cya0l6a21KRERvSmZTNG9aQzgifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjg0NzM3MjYzLCJpYXQiOjE2ODQ3MzM2NjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiOGJhZWVkYjQtMGMyOC00MDY1LTgxZDctZjY4MTk2YzBiNWFjIn19LCJuYmYiOjE2ODQ3MzM2NjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.u_rFMGQPfWKybODPMfnZNnB8HeycXo5cTfB1ga4RXNE4YMZcmRv6nTseNtz4CvgQEvAMAGdgG0BaZSdUPMx1aiUTNwf4mxF3O8n9E4P7z_6kE0NnbWDg14j9jJpAKfN7G_EIY7fngTQ4_5L94teLWKBYKnwlSL2aZCVPtTQ5IlCcO8YHM8AZaoHxMdBICMY_doiWwxLRsXVMNc3FcdQN6W88ALupB9r8RPIEkqyxFcQLK0pofCsX2QImSyV4VNxyiMhQ9x-ONJIYyz0pVehiXQUGqWHUI8y05VAYZzjWIMOEEjn3oA00zc3gvp01Z17t-vAh9JMYfqE92zBruSFc2w<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"accessing-kubernetes-dashboard\">Accessing Kubernetes Dashboard<\/h3>\n\n\n\n<p>You can now access your Kubernetes dashboard from your browser using any node IP in the cluster on port 30001\/tcp and HTTPS, <strong><code>https:\/\/Node-IP:30001<\/code><\/strong>.<\/p>\n\n\n\n<p>Of course accept the use of insecure SSL cert and proceed.<\/p>\n\n\n\n<div><a href=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/kubernetes-dashboard-login.png\" class=\"td-modal-image\"><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1859\" height=\"571\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/kubernetes-dashboard-login.png\" alt=\"Install Kubernetes Dashboard on Ubuntu\" class=\"wp-image-16781\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/kubernetes-dashboard-login.png?v=1684733943 1859w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/kubernetes-dashboard-login-768x236.png?v=1684733943 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/kubernetes-dashboard-login-1536x472.png?v=1684733943 1536w\" sizes=\"(max-width: 1859px) 100vw, 1859px\" \/><\/figure><\/a><\/div>\n\n\n\n<p>Select Token and paste the token generated above and proceed to sign in.<\/p>\n\n\n\n<p>And there you go! landing on Kubernetes dashboard,<\/p>\n\n\n\n<div><a href=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/Kubernetes-Dashboard.png\" class=\"td-modal-image\"><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1908\" height=\"1185\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/Kubernetes-Dashboard.png\" alt=\"Install Kubernetes Dashboard on Ubuntu\" class=\"wp-image-16782\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/Kubernetes-Dashboard.png?v=1684734313 1908w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/Kubernetes-Dashboard-768x477.png?v=1684734313 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/05\/Kubernetes-Dashboard-1536x954.png?v=1684734313 1536w\" sizes=\"(max-width: 1908px) 100vw, 1908px\" \/><\/figure><\/a><\/div>\n\n\n\n<p>You should now be able to manage your cluster from the Kubernetes dashboard. Explore further!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"install-metrics-server\">Install Metrics Server<\/h3>\n\n\n\n<p>You can see how to integrate Kubernetes dashboard with metrics server to be able to view graphs of the metrics on the dashboard.<\/p>\n\n\n\n<p><a href=\"https:\/\/kifarunix.com\/step-by-step-guide-install-metrics-server-on-kubernetes\/\" target=\"_blank\" rel=\"noreferrer noopener\">Step-by-Step Guide: How to Install Metrics Server on Kubernetes<\/a><\/p>\n\n\n\n<p>That marks the end of our tutorial on how to installing Kubernetes dashboard on Ubuntu.<\/p>\n\n\n\n<p>Read more on the <a href=\"https:\/\/github.com\/kubernetes\/dashboard\/blob\/master\/docs\/README.md\" target=\"_blank\" rel=\"noreferrer noopener\">documentation page<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"other-tutorials\">Other Tutorials<\/h2>\n\n\n\n<p><a href=\"https:\/\/kifarunix.com\/what-are-the-core-concepts-in-kubernetes\/\" target=\"_blank\" rel=\"noreferrer noopener\">What are the core concepts in Kubernetes?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/kifarunix.com\/remove-worker-node-from-kubernetes-cluster\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gracefully Remove Worker Node from Kubernetes Cluster<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This step-by-step guide provides an easy way to install Kubernetes dashboard on Ubuntu 22.04\/20.04. Installing Kubernetes Dashboard on Ubuntu 22.04\/20.04 is a simple process that<\/p>\n","protected":false},"author":10,"featured_media":16782,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_lock_modified_date":false,"footnotes":""},"categories":[1076,121,1668,72],"tags":[6773,6769,6772,6770,6771],"class_list":["post-16768","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-containers","category-howtos","category-kubernetes","category-monitoring","tag-easy-way-to-install-kubernetes-dashboard","tag-install-kubernetes-dashboard-on-linux","tag-kubernetes-dashboard","tag-kubernetes-dashboard-setup","tag-manage-kubernetes-cluster-from-dashboard","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","resize-featured-image"],"_links":{"self":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/16768"}],"collection":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/comments?post=16768"}],"version-history":[{"count":18,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/16768\/revisions"}],"predecessor-version":[{"id":20747,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/16768\/revisions\/20747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media\/16782"}],"wp:attachment":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media?parent=16768"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/categories?post=16768"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/tags?post=16768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}