# Учётка для входа в Kubernetes Dashboard. # # Чарт дашборда своего пользователя НЕ создаёт: он лишь показывает форму # ввода токена и ходит в API от имени того, чей токен введён. Без этих трёх # объектов дашборд открывается, но войти в него нечем. # # --- Про бессрочность токена ------------------------------------------------- # Начиная с Kubernetes 1.24 ServiceAccount больше не получает вечный токен # автоматически, а `kubectl create token` выдаёт короткоживущий (по умолчанию # час). Единственный штатный способ получить токен без срока действия — # завести Secret типа kubernetes.io/service-account-token с аннотацией # kubernetes.io/service-account.name: контроллер токенов сам положит в него # поле token, и это будет legacy-токен, действующий, пока существует Secret. # # Значение поля token в манифесте НЕ указывается и в репозиторий не попадает: # его проставляет кластер. Прочитать — # kubectl -n kubernetes-dashboard get secret dashboard-admin-token \ # -o go-template='{{.data.token | base64decode}}' # # --- Про объём прав ---------------------------------------------------------- # Привязка идёт к встроенной роли cluster-admin: дашборд задуман как # инструмент оператора — смотреть логи, заходить в контейнеры, перезапускать # нагрузки, — и с меньшими правами половина его экранов отдаёт ошибки доступа. # # Плата за это честная: токен бессрочный, прав максимум, а дашборд опубликован # наружу на dashboard.sarex.local.lonsdaleites.ru. Для закрытого тестового # контура приемлемо; если контур перестанет быть одноразовым — либо сузить # roleRef до встроенной view (дашборд станет read-only), либо удалить Secret, # и токен мгновенно перестанет действовать. --- apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole # Встроенная роль, своей не заводим: повторять cluster-admin вручную — # это гарантированно отстать от списка ресурсов при обновлении кластера. name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: v1 kind: Secret metadata: name: dashboard-admin-token namespace: kubernetes-dashboard annotations: kubernetes.io/service-account.name: dashboard-admin type: kubernetes.io/service-account-token