Для того что бы у нас был 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
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
