Панель управления 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
Другие вопросы по тегам