Dashboard: учётка для входа и бессрочный токен
Чарт дашборда своего пользователя не создаёт — он лишь показывает форму ввода токена и ходит в API от имени того, чей токен введён. До сих пор дашборд открывался, но войти в него было нечем. Добавлены ServiceAccount dashboard-admin, привязка к встроенной роли cluster-admin и Secret типа kubernetes.io/service-account-token. Secret нужен именно ради бессрочности: с Kubernetes 1.24 ServiceAccount не получает вечный токен автоматически, а kubectl create token выдаёт короткоживущий. Secret с аннотацией kubernetes.io/service-account.name — единственный штатный способ получить токен без срока действия: поле token заполняет контроллер, в репозиторий оно не попадает. Права взяты максимальные осознанно: дашборд задуман как инструмент оператора — логи, exec, перезапуск нагрузок, — и с меньшими правами половина экранов отдаёт ошибки доступа. Для закрытого тестового контура это приемлемо; сузить до read-only можно заменой roleRef на встроенную view, отозвать доступ — удалением Secret.
This commit is contained in:
parent
f9874afb2b
commit
0a69d528b3
59
infrastructure/dashboard/aero/admin-user.yaml
Normal file
59
infrastructure/dashboard/aero/admin-user.yaml
Normal file
@ -0,0 +1,59 @@
|
||||
# Учётка для входа в 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
|
||||
@ -3,6 +3,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
# ServiceAccount + ClusterRoleBinding + Secret с бессрочным токеном.
|
||||
# Своего пользователя чарт дашборда не создаёт — обоснование в шапке файла.
|
||||
- admin-user.yaml
|
||||
patches:
|
||||
- path: dashboard.yaml
|
||||
target:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user