Для  того что бы у нас был web gui проделаем следующее

mkdir /home/pavelcerts

cd ~/certs

openssl genrsa -out k8s_dashboard.key 2048

openssl rsa -in k8s_dashboard.key -out k8s_dashboard.key

openssl req -sha256 -new -key k8s_dashboard.key -out k8s_dashboard.csr

openssl x509 -req -sha256 -days 365 -in k8s_dashboard.csr -signkey k8s_dashboard.key -out k8s_dashboard.crt

Выполняем создание namespace 

kubectl create namespace kubernetes-dashboard

подгружаем сертификаты

kubectl -n kubernetes-dashboard create secret generic kubernetes-dashboard-certs --from-file=/home/pavel/certs/

проверяем

kubectl get secrets --namespace=kubernetes-dashboard

Теперь скачиваем сам dashboard

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

kubectl apply -f recommended.yaml

вывод будет примерно такой

kubectl apply -f recommended.yaml

namespace/kubernetes-dashboard created

serviceaccount/kubernetes-dashboard created

service/kubernetes-dashboard created

secret/kubernetes-dashboard-certs created

secret/kubernetes-dashboard-csrf created

secret/kubernetes-dashboard-key-holder created

configmap/kubernetes-dashboard-settings created

role.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created

rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created

deployment.apps/dashboard-metrics-scraper created

Смотрим созданные ресурсы

kubectl get all --namespace=kubernetes-dashboard

Теперь нам надо, что бы доступ был из локальной сети, а не только с локальной тачки выполним

kubectl edit services --namespace=kubernetes-dashboard kubernetes-dashboard

и меняем одно значение

type: ClusterIP

на

type: NodePort

сохраняемся и выходим

создаем файл dashboard-adminuser-01.yaml для создания Service Account с таким содержимым

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
выполним команду
kubectl apply -f dashboard-adminuser.yaml

Далее создадим clusterrolebilding dashboard.yml

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-dashboard

kubectl apply -f dashboard.yml

Далее создаем токен для данного пользователя

kubectl -n kubernetes-dashboard create token admin-user

примерно такой будет вывод
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXY1N253Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMzAzMjQzYy00MDQwLTRhNTgtOGE0Ny04NDllZTliYTc5YzEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Z2JrQlitASVwWbc-s6deLRFVk5DWD3P_vjUFXsqVSY10pbjFLG4njoZwh8p3tLxnX_VBsr7_6bwxhWSYChp9hwxznemD5x5HLtjb16kI9Z7yFWLtohzkTwuFbqmQaMoget_nYcQBUC5fDmBHRfFvNKePh_vSSb2h_aYXa8GV5AcfPQpY7r461itme1EXHQJqv-SN-zUnguDguCTjD80pFZ_CmnSE1z9QdMHPB8hoB4V68gtswR1VLa6mSYdgPwCHauuOobojALSaMc3RH7MmFUumAgguhqAkX3Omqd3rJbYOMRuMjhANqd08piDC3aIabINX6gP5-Tuuw2svnV6NYQ

создаем секрет secret.yml с таким содержимым
apiVersion: v1
kind: Secret
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: "admin-user"   
type: kubernetes.io/service-account-token  

выполняем его
kubectl apply -f secret.yml

Так же можно посмотреть токен выполнив команду
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d
после всего выполним команду
kubectl get service --namespace=kubernetes-dashboard

NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.105.74.192    <none>        8000/TCP        86m
kubernetes-dashboard        NodePort    10.104.218.168   <none>        443:32040/TCP   86m
 
Далее открываем браузер
выбираем метод авторизации ТОКЕН который выше и пользуемся