Панель управления Kubernetes, CrashLoopBackOff, пользователь не в пространстве имен kube-system

Я пытаюсь запустить панель управления Kubernetes. Я выполнил действия, описанные в официальной вики.

Перечисляя модули kube-system, я вижу:

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.


person Alexander Kleinhans    schedule 26.02.2019    source источник


Ответы (2)


Прежде всего, ваш случай не связан с этой проблемой. Это точно такая же ошибка, как и у вас.

У вас должны быть соответствующие 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

И, конечно, проверьте свои капсулы. Надеюсь это будет полезно

person coolinuxoid    schedule 28.02.2019

Поскольку ваша ошибка предполагает 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 serviceaccount в пространстве имен 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
person Munir Hossain    schedule 04.10.2019