# Dashboard WithOut Proxy

## Enable additional Add-Ons

We will need to enable a few additional Kubernetes add-ons to get this functionality up and running.

```
microk8s enable ingress # Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster.
microk8s enable dashboard # web-based Kubernetes user interface
microk8s enable dns # creates DNS records for services and pods
microk8s enable storage # provide both long-term and temporary storage to Pods in your cluster.
```

### Enable Host Access

We need to alos enable one more additional add-on `host-access` to enable the access to services running on the host machine via fixed IP address.

We can enable to make use of the default address

```
microk8s enable host-access
```

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk-"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class=""><div>  
</div></div></div></div></div></div></div></div></div></div>### Edit Kubernetes Dashboard Service

We need to edit the kubernetes-dashboard service file which provides dash-board functionality. To to edit this we need to edit dashboard service and change service **type** from **ClusterIP** to **NodePort**.

We use the following command to edit the file using vim.

```
kubectl -n kube-system edit service kubernetes-dashboard
```

This should open the contents of the file in vim and it should look something similar file below

You need to change `type` to `NodePort`

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk-%23-please-edit-the-ob"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class=""><div><span class="enlighter-c0">\# Please edit the object below. Lines beginning with a '#' will be ignored,</span></div></div><div class=""><div><span class="enlighter-c0">\# and an empty file will abort the edit. If an error occurs while saving this file will be</span></div></div><div class=""><div><span class="enlighter-c0">\# reopened with the relevant failures.</span></div></div><div class=""><div><span class="enlighter-c0">\#</span></div></div><div class=""><div><span class="enlighter-text">apiVersion: v1</span></div></div><div class=""><div><span class="enlighter-text">kind: Service</span></div></div><div class=""><div><span class="enlighter-text">metadata:</span></div></div><div class=""><div><span class="enlighter-text"> annotations:</span></div></div><div class=""><div><span class="enlighter-text"> kubectl.</span><span class="enlighter-m3">kubernetes</span><span class="enlighter-text">.</span><span class="enlighter-m3">io</span><span class="enlighter-text">/last-applied-configuration: </span><span class="enlighter-g0">|</span></div></div><div class=""><div><span class="enlighter-g1">{</span><span class="enlighter-s0">"apiVersion"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"v1"</span><span class="enlighter-text">,</span><span class="enlighter-s0">"kind"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"Service"</span><span class="enlighter-text">,</span><span class="enlighter-s0">"metadata"</span><span class="enlighter-text">:</span><span class="enlighter-g1">{</span><span class="enlighter-s0">"annotations"</span><span class="enlighter-text">:</span><span class="enlighter-g1">{}</span><span class="enlighter-text">,</span><span class="enlighter-s0">"labels"</span><span class="enlighter-text">:</span><span class="enlighter-g1">{</span><span class="enlighter-s0">"k8s-app"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"kubernetes-dashboard"</span><span class="enlighter-g1">}</span><span class="enlighter-text">,</span><span class="enlighter-s0">"name"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"kubernetes-dashboard"</span><span class="enlighter-text">,</span><span class="enlighter-s0">"namespace"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"kube-system"</span><span class="enlighter-g1">}</span><span class="enlighter-text">,</span><span class="enlighter-s0">"spec"</span><span class="enlighter-text">:</span><span class="enlighter-g1">{</span><span class="enlighter-s0">"ports"</span><span class="enlighter-text">:</span><span class="enlighter-g1">\[{</span><span class="enlighter-s0">"port"</span><span class="enlighter-text">:</span><span class="enlighter-n1">443</span><span class="enlighter-text">,</span><span class="enlighter-s0">"targetPort"</span><span class="enlighter-text">:</span><span class="enlighter-n1">8443</span><span class="enlighter-g1">}\]</span><span class="enlighter-text">,</span><span class="enlighter-s0">"selector"</span><span class="enlighter-text">:</span><span class="enlighter-g1">{</span><span class="enlighter-s0">"k8s-app"</span><span class="enlighter-text">:</span><span class="enlighter-s0">"kubernetes-dashboard"</span><span class="enlighter-g1">}}}</span></div></div><div class=""><div><span class="enlighter-text"> creationTimestamp: </span><span class="enlighter-s0">"2022-03-09T14:10:50Z"</span></div></div><div class=""><div><span class="enlighter-text"> labels:</span></div></div><div class=""><div><span class="enlighter-text"> k8s-app: kubernetes-dashboard</span></div></div><div class=""><div><span class="enlighter-text"> name: kubernetes-dashboard</span></div></div><div class=""><div><span class="enlighter-text"> namespace: kube-system</span></div></div><div class=""><div><span class="enlighter-text"> resourceVersion: </span><span class="enlighter-s0">"1029725"</span></div></div><div class=""><div><span class="enlighter-text"> selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard</span></div></div><div class=""><div><span class="enlighter-text"> uid: b2608643-a712-4b44-abad-160cf140df49</span></div></div><div class=""><div><span class="enlighter-text">spec:</span></div></div><div class=""><div><span class="enlighter-text"> clusterIP: </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">220</span></div></div><div class=""><div><span class="enlighter-text"> clusterIPs:</span></div></div><div class=""><div><span class="enlighter-text"> - </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">220</span></div></div><div class=""><div><span class="enlighter-text"> externalTrafficPolicy: Cluster</span></div></div><div class=""><div><span class="enlighter-text"> internalTrafficPolicy: Cluster</span></div></div><div class=""><div><span class="enlighter-text"> ipFamilies:</span></div></div><div class=""><div><span class="enlighter-text"> - IPv4</span></div></div><div class=""><div><span class="enlighter-text"> ipFamilyPolicy: SingleStack</span></div></div><div class=""><div><span class="enlighter-text"> ports:</span></div></div><div class=""><div><span class="enlighter-text"> - nodePort: </span><span class="enlighter-n1">30536</span></div></div><div class=""><div><span class="enlighter-text"> port: </span><span class="enlighter-n1">443</span></div></div><div class=""><div><span class="enlighter-text"> protocol: TCP</span></div></div><div class=""><div><span class="enlighter-text"> targetPort: </span><span class="enlighter-n1">8443</span></div></div><div class=""><div><span class="enlighter-text"> selector:</span></div></div><div class=""><div><span class="enlighter-text"> k8s-app: kubernetes-dashboard</span></div></div><div class=""><div><span class="enlighter-text"> sessionAffinity: None</span></div></div><div class=""><div><span class="enlighter-text"> type: clusterIP </span><span class="enlighter-c0">\## Change this to NodePort</span></div></div><div class=""><div><span class="enlighter-text">status:</span></div></div><div class=""><div><span class="enlighter-text"> loadBalancer: </span><span class="enlighter-g1">{}</span></div></div></div></div></div></div></div></div></div></div>Once you save and exit the file K8s will automatically restart the service.

We can then get the Port the service is running by using the following command

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk-kubectl--n-kube-syst-1"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class=""><div><span class="enlighter-text">kubectl -n kube-system get services</span></div></div></div></div></div></div></div></div></div></div>Which should display something similar to the below and which we can see that the Dashboard is available on port `30536` in my case

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk--1"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-toolbar-top enlighter-toolbar">  
</div></div></div></div></div></div></div>### Check Port

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk--2"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-toolbar-top enlighter-toolbar"><div class="enlighter-btn enlighter-btn-copy">  
</div></div></div></div></div></div></div></div>```
sudo snap install nmap
```

```
nmap localhost -p 32061
```

<div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover " id="bkmrk-name-type-cluster-ip"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-code"><div class="enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-monokai enlighter-l-generic enlighter-hover "><div class="enlighter-toolbar-top enlighter-toolbar"></div><div class="enlighter-code"><div class="enlighter"><div class=""><div><span class="enlighter-text">NAME TYPE CLUSTER-IP EXTERNAL-IP </span><span class="enlighter-m0">PORT</span><span class="enlighter-g1">(</span><span class="enlighter-text">S</span><span class="enlighter-g1">)</span><span class="enlighter-text"> AGE</span></div></div><div class=""><div><span class="enlighter-text">metrics-server ClusterIP </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">108</span> <span class="enlighter-g1">&lt;</span><span class="enlighter-text">none</span><span class="enlighter-g1">&gt;</span> <span class="enlighter-n1">443</span><span class="enlighter-text">/TCP 7d4h</span></div></div><div class=""><div><span class="enlighter-text">dashboard-metrics-scraper ClusterIP </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">170</span> <span class="enlighter-g1">&lt;</span><span class="enlighter-text">none</span><span class="enlighter-g1">&gt;</span> <span class="enlighter-n1">8000</span><span class="enlighter-text">/TCP 7d4h</span></div></div><div class=""><div><span class="enlighter-text">kube-dns ClusterIP </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">10</span> <span class="enlighter-g1">&lt;</span><span class="enlighter-text">none</span><span class="enlighter-g1">&gt;</span> <span class="enlighter-n1">53</span><span class="enlighter-text">/UDP,</span><span class="enlighter-n1">53</span><span class="enlighter-text">/TCP,</span><span class="enlighter-n1">9153</span><span class="enlighter-text">/TCP 7d4h</span></div></div><div class=""><div><span class="enlighter-text">kubernetes-dashboard NodePort </span><span class="enlighter-n0">10.152</span><span class="enlighter-text">.</span><span class="enlighter-m3">183</span><span class="enlighter-text">.</span><span class="enlighter-m3">220</span> <span class="enlighter-g1">&lt;</span><span class="enlighter-text">none</span><span class="enlighter-g1">&gt;</span> <span class="enlighter-n1">443</span><span class="enlighter-text">:</span><span class="enlighter-n1">30536</span><span class="enlighter-text">/TCP 7d4h</span></div></div></div></div><div class="enlighter-toolbar-bottom enlighter-toolbar">  
</div></div></div></div></div></div>We can now open our Firefox browser on any workstation on our network and navigate to `https://{server ip}:{port number}` in my case it is `<a href="https://192.168.0.35:30536">https://192.168.0.35:30536</a>`

### Get the token

We need to get the token from the server so we can do so using the following command in the server terminal

```
token=$(kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) kubectl -n kube-system describe secret $token
```

This should return something similar too

<div class="wp-block-image is-style-default" id="bkmrk--3"><figure class="aligncenter size-large">[![](https://garywoodfine.com/wp-content/uploads/2022/03/image-6-1024x303.png)](https://garywoodfine.com/wp-content/uploads/2022/03/image-6.png)</figure></div>Copy the token text and paste it into the login dialog in the browser

<div class="wp-block-image is-style-default" id="bkmrk--4"><figure class="aligncenter size-large">[![](https://garywoodfine.com/wp-content/uploads/2022/03/image-7-1024x371.png)](https://garywoodfine.com/wp-content/uploads/2022/03/image-7.png)</figure></div>Then you should be able to login with ease.

<div class="wp-block-image is-style-default" id="bkmrk--5"><figure class="aligncenter size-large">[![](https://garywoodfine.com/wp-content/uploads/2022/03/image-8-1024x774.png)](https://garywoodfine.com/wp-content/uploads/2022/03/image-8.png)</figure></div>