Хочу чтобы dashboard был доступен не только с master сервера но и в приницпе из сети, поэтому внесу правки в файл
cd /home/.kube # тут я решил хранит yaml файлы
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
В Самом низу находим и комментируем
#nodeSelector:
# "kubernetes.io/os":linux
а в kind: Service добавим тип порта NodePort, и номер порта nodePort: 30080
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30080 # добавил эту строку
selector:
k8s-app: kubernetes-dashboard
type: NodePort # добавил эту строку
И применим этот файл
kubectl apply -f recommended.yaml
посомтрим что получилось
kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7ccb66c857-czrbd 1/1 Running 0 73s
kubernetes-dashboard-78f87ddfc-ndqwt 1/1 Running 0 73s
Бежит два пода.
Создадим пользователя и секрет для него:
Я создал два файла:
/home/.kube/dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: user_login
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: user_login
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: user_login
namespace: kubernetes-dashboard
Выполним:
$ kubectl apply -f dashboard-adminuser.yaml
Получим сообщение
serviceaccount/kube created
clusterrolebinding.rbac.authorization.k8s.io/kube created
Второй файл
/home/.kube/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: user_login
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "user_login"
type: kubernetes.io/service-account-token
Выполним :
$ kubectl apply -f secret.yaml
Получим сообщение
secret/user_login created
Получим токен авториазации:
kubectl get secret kube -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d > ./token
Ключ будет сохранён в файле token
Посмтрим какие порты у нас слушаются:
$ kubectl get services -n kubernetes-dashboard| grep dashboard
dashboard-metrics-scraper ClusterIP 10.111.249.177 <none> 8000/TCP 45m
kubernetes-dashboard NodePort 10.106.90.45 <none> 443:30080/TCP 45m
Слушаем 30080 порт, как и планирвалось
Попробуйем зайти на наш dashboard https://ip_address:30080, ip_address - внешний адрес серевра, не пода.
Получилось, вставим токен который мы получили в выше, из файла token
Ура Ура работает. Не понадобилось проксировать ничего. ╰(*´︶`*)╯,。・:*:・゚