Панель управления Kubernetes, CrashLoopBackOff, пользователь не находится в пространстве имен "kube-system"
Я пытаюсь запустить панель управления Kubernetes. Я следовал за шагами в официальной вики.
Перечисляя куб-систему, я вижу:
kubectl get pods -n kube-system
kubernetes-dashboard-head-7478c547df-8bmxf 0/1 CrashLoopBackOff 1 12s
Перезапуск этого модуля вызывает тот же сбой. В журналах это, кажется, потерпело крах, потому что:
kubectl logs -n kube-system kubernetes-dashboard-head-7478c547df-8bmxf
2019/02/26 23:15:57 Starting overwatch
2019/02/26 23:15:57 Using namespace: kube-system
2019/02/26 23:15:57 Using in-cluster config to connect to apiserver
2019/02/26 23:15:57 Using secret token for csrf signing
2019/02/26 23:15:57 Initializing csrf token from kubernetes-dashboard-csrf secret
panic: secrets "kubernetes-dashboard-csrf" is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard-head" cannot get secrets in the namespace "kube-system": RBAC: role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal-head" not found
Я не до конца понимаю, как это может быть. serviceaccounts
из этого контейнера пространства имен kubernetes-dashbaord-head
:
kubectl get serviceaccounts -n kube-system
kubernetes-dashboard-head 1 8h
Так как это serviceaccount
(это то же самое, что "Пользователь"?) указано в serviceaccounts
под пространством имен kube-system
почему он не может получить секреты из этого пространства имен?
С записью в RBAC: role.rbac.authorization.k8s.io ... not found
Это связано с этим вопросом?
Это не на minikube
,
1 ответ
Прежде всего, ваше дело не связано с этой проблемой. Это просто похожая ошибка, которую вы получаете.
Вам нужно иметь соответствующие Role и RoleBinding, которых у вас, вероятно, нет, поэтому вы получаете эту ошибку. Вы можете проверить с помощью следующей команды:
kubectl get role,rolebinding -n kube-system |grep kubernetes-dashboard-minimal-head
Если вы посмотрите последний файл развертывания yaml панели мониторинга Kubernetes из своего руководства по установке, вы найдете ниже ресурсы Role и RoleBinding.
# ------------------- Dashboard Role & Role Binding ------------------- #
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubernetes-dashboard-minimal-head
namespace: kube-system
rules:
# Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create"]
...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-dashboard-minimal-head
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes-dashboard-minimal-head
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-head
namespace: kube-system
Но я не уверен, как вы развернули развертывание, поэтому я бы посоветовал вам просто удалить файл yaml развертывания через
kubectl delete -f <your-deployment-file.yaml>
затем примените последний, который включает в себя Role и RoleBindings для Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard-head.yaml
Затем вы можете проверить еще раз с помощью:
kubectl get role,rolebinding -n kube-system |grep kubernetes-dashboard-minimal-head
И проверьте свои стручки конечно. Надеюсь это будет полезно
Как вы предлагаете ошибку secrets "kubernetes-dashboard-csrf" is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard-head" cannot get secrets in the namespace "kube-system": RBAC: role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal-head" not found
, вы запускаете модуль k8s-dashboard под kubernetes-dashboard-head
сервисный счет в kube-system
пространство имен. А сервисный аккаунт не имеет доступа кget/list
секрет kubernetes-dashboard-csrf
. Теперь, чтобы решить эту проблему, вам нужно предоставить доступ для получения этого секрета. Вы можете сделать это двумя способами: 1. разрешить панели управления работать какcluster-admin
роль 2. просто позвольте ему получить этот секрет в этом пространстве имен. Второй вариант намного лучше с точки зрения безопасности. Для этого вам необходимо добавить / отредактировать свою кластерную роль (вероятно, это кластерная роль, поскольку вы хотите просматривать / редактировать объекты в масштабе всего кластера), которая привязана к этому сервисному аккаунту (kubernetes-dashboard-head) следующим образом:
- apiGroups:
- ""
resourceNames:
- kubernetes-dashboard-csrf
resources:
- secrets
verbs:
- get
- list
- create
- update