2022-11-24
2595

Установка и использование Kubernetes dashboard

Установка dashboard

Для установки dashboard в кластер нужно выполнить
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
Проверка
kubectl get all -n kubernetes-dashboard

Dashboard в minikube установлен по-умолчанию.

Подключение к dashboard

Сервис kubernetes-dashboard для доступа к dashboard имеет по умолчанию тип ClusterIP, чтобы можно было получить доступ, нужно изменить тип на NodePort
kubectl edit service/kubernetes-dashboard -n kubernetes-dashboard
Узнать по какому порту подключаться можно командой
kubectl get service/kubernetes-dashboard -n kubernetes-dashboard
Открыть web-страницу можно будет по адресу https://<node-ip>:<port>
При использовании minikube для доступа к dashboard нужно запустить
kubectl proxy
Затем подключиться к dashboard можно по ссылке http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Dashboard не работает через http, если обращение осуществляется не с localhost.

Создание пользователя

Dashboard использует встроенную систему RBAC Kubernetes, поэтому требуется создать пользователя и дать ему права на Dashboard.

Создание аккаунта
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF
Определение роли созданного пользователя
cat <<EOF | kubectl apply -f -
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
EOF

Вход в dashboard

Войти в dashboard можно или с помощью токена или с используя файл с конфигом.

Вход с помощью токена

Этот токен доступа существует в секретном хранилище созданного пользователя. Он автоматически генерируется при создании пользователя, и нужно получить его для входа в dashboard.

Для получения токена нужно выполнить
kubectl -n kubernetes-dashboard create token admin-user
По-умолчанию срок службы такого токена небольшой. Можно задать срок службы при создании, например
kubectl -n kubernetes-dashboard create token admin-user --duration=24h

Вход с помощью kubeconfig

Нужно создать пустой файл, пусть будет называться kuberconfig в него скопировать вывод команды
kubectl config view
Чтобы не создавать каждый раз новый токен нужно создать secret
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  namespace: kubernetes-dashboard
  name: admin-user
  annotations:
    kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token
EOF
Затем выполнить
kubectl get secrets/admin-user -n kubernetes-dashboard -o json
из вывода взять без кавычек значение поля
"data": {
  "ca.crt":
и вставить это значение в файл kuberconfig в поле certificate-authority-data вместо DATA+OMITTED Выполнить
kubectl get secret/admin-user -o jsonpath='{.data.token}' -n kubernetes-dashboard | base64 --decode
в файле kuberconfig добавить поле token в конце и вставить в него полученное значение
В файле kuberconfig заменить
users:
- name: kubernetes-admin
на
users:
- name: admin-user
И заменить
- context:
    cluster: kubernetes
    user: kubernetes-admin
на
- context:
    cluster: kubernetes
    user: admin-user
Пример итогового файла
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EY3hPVEEyTlRNeE1Wb1hEVE15TURjeE5qQTJOVE14TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTG1CCkZlUHlCd1hlM3NoVFVpVWhBRE5IUSs2Rk5GWk80OEw0QTFGRStRTm5Ud2ZBclorM29Qc2ZOd3NCVEVsekRscTcKVWdReGFEZ2RoSmJxQTkrUi9ERFhZdURhSG9nMWVGaGhlcVVpMy9aUFptcmwwNUR4SHcvL1dSMit2VzNsdVdHcApkc1k0OForWDkyaUVHaWRpbHU5cGpRVlRkdmNBOWNXQ1NGbld5cHNubURxWmsvMjVnbU5IZGN5ditHUVpOaFI5Cmxna2tSalFUTDdnWmVscEt2emJYRG9lcEFSVEtpSWtkQXpubnRaekU3TzZ3Ymx0ZW5PS1ZkYnVyeUxIVjdObHkKaEdscTdJWmJjT2dlTnltVEErVm5XaEJWM1ZMYnYwYXJlSEM2bVpQS00vUWFOMzIwMWtKQkdKdnpIdmZlaDU5Ugp5dWM0cEcrVDNSd3A3aUlDYTVVQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZCSVppekxzOFZUTFZtNWJyM1BBeEg0TjArZ3lNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSUdKb2FjQU95bjJpbWw5eU9ZZgpGM0VIVXpTRGZIb0dwbEtNUnFabUp2b2RFalVObUhHUEZEMDdnY3lHVnhweHV3NHQ0TGFZN1JydVpFelhDRDM0ClBjTk5raFBEU3VIaVdtdDdjZ0Y5NjNSVWhvTHN3dEZrRHRNLzAvaXNPTzlSdlV3VVhWVUNPdi8wMG9KajdJd2EKWTQ3YzcwUXMyVnU3TUZPVlYyZFhzRUdNYS9XK1dyUUpkQ2FQTCthUXN6N0Q3cFdLQUQxYWdkZm4xdUg1L3E0WQpLQXh4NytYOFJ4Nk5pU1IxWEFzMGEwQTNjZmJZbGx1Zk9pNkFHc2pRdWZaTHdtQjBGYmZJb1VONXZlcGNqTXFHCkdBTTduc0ErREU4dHNnZzJPYkVyVDFXaGJHQ01Gb25GS1lib0JXbHJNWEZJVVNUYWE0c0pIZ0JnMXRIYSs1djkKZE9vPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://192.168.10.15:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: admin-user
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: admin-user
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ildpc2ZfNkJZblVVX0FHbHBYRUVCRnRTUVJVNGRkZkM5ZUNxQ3hMckJRN3cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhZTkxNmRhMi04NTFmLTQyMzctYmMxYi1mOGIwZTM4NmYwNTAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.S_K8zG_2_fN7svoXVtHyOEB1wS_4k2t0hWSf3nlx6pZPJKe1FYzBKp4TyeUaGEnU54iU5mVSzHRnrdhQPKjkvg4cHBJrPZ7irWYndulo4it9j3txLXAJ2jtinh_GzOo5Tj4NtjuUQss7ge4bIOK4-U2MQZI8udSBNz1OF8xt7bPVaDOOUoa5RZx5ajkBV64u9eULowGHkCPB1KVFe4XJ6rkhIaWNTVtcDyqgxBOSxiMKRFA2NzGDuLXpn06VByED2IbMa9dKEcBh4u6uqW4yIDSsIxy1tlMMjYDFl_w1oejAjCPnBjcmbR9E-mJtxQgiAUw_7Ak2s293nWDHlTlJYA

Теперь можно войти в дашборд указав файл конфига.

Lens

Lens - это IDE для управления кластерами kubernetes. Lens включает в себя функции dashboard и больше других возможностей. Более удобная, по сравнению с dashboard и кроме того, к ней можно подключить сразу большое количество кластеров.

Для управления кластером через Lens нужно добавить его. Для этого нужно с master-сервера взять файл
/etc/kubernetes/admin.conf
В lens зайти в Categories - Clusters, в правом нижнем углу нажать на плюс, выбрать вариант указания конфигурации: файл, каталог с файлами или вставить текст, скопированный из admin.conf.