Kubernetes: Постоянные тома RBAC не работают с пространствами имен

Созданный на 19 дек. 2016  ·  3Комментарии  ·  Источник: kubernetes/kubernetes

СООБЩЕНИЕ ОБ ОШИБКЕ

Версия Kubernetes (используйте kubectl version ): Версия клиента: version.Info {Major: "1", Minor: "5", GitVersion: "v1.5.1", GitCommit: "82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState: "clean" , BuildDate: «2016-12-14T00: 57: 05Z», GoVersion: «go1.7.4», компилятор: «gc», платформа: «darwin / amd64»}
Версия сервера: version.Info {Major: «1», Minor: «5+», GitVersion: «v1.5.1-3 + 10e41f22e4421c», GitCommit: «10e41f22e4421c9a14e9e6782c6375c199a07a86», GitTreeState: «clean», BuildDate -15T10: 06: 44Z ", GoVersion:" go1.7.4 ", компилятор:" gc ", платформа:" linux / amd64 "}

Окружающая среда :

  • Облачный провайдер или конфигурация оборудования : openstack
  • ОС (например, из / etc / os-release): centos7
  • Ядро (например, uname -a ): 3.10.0-327.36.3.el7.x86_64

Что произошло : мы включили аутентификацию RBAC. У нас есть две разные привязки ролей:

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-custom
subjects:
- kind: ServiceAccount
  name: default
  namespace: kube-system
- kind: User
  name: kubelet
  namespace: kube-system
- kind: User
  name: clusteradmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

а также

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: RoleBinding
metadata:
  name: default-admin
  namespace: default
subjects:
- kind: ServiceAccount
  name: default
- kind: User
  name: defaultadmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

Итак, у нас есть два разных пользователя: clusterteradmin, который имеет доступ ко всему в кластере kube, и defaultadmin, который должен иметь доступ ко всем ресурсам в пространстве имен по умолчанию. Выполнение команд PV с помощью clusterteradmin работает нормально, при использовании defaultadmin в пространстве имен по умолчанию возникает ошибка:

kubectl получить pv
Ошибка сервера (запрещено): сервер не разрешает доступ к запрошенному ресурсу (получить постоянные тома)

Ошибка с сервера (Запрещено): ошибка при создании «db-pv.yaml»: сервер не разрешает доступ к запрошенному ресурсу (post persistentvolumes)

Что вы ожидали : defaultadmin должен иметь доступ к PV-ресурсам в определенном (в моем случае по умолчанию) пространстве имен, потому что кластерная роль cluster-admin говорит следующее:

- apiGroups:
  - '*'
  attributeRestrictions: null
  resources:
  - '*'
  verbs:
  - '*'
- attributeRestrictions: null
  nonResourceURLs:
  - '*'
  verbs:
  - '*'

Здесь важны ресурсы *, но похоже, что PV не является частью подстановочного знака.

Как это воспроизвести (максимально минимально и точно):

  • включить RBAC
  • создать двух пользователей, clusterteradmin и defaultadmin
  • добавить clusterrolebinding и rolebinding, о которых упоминалось ранее в этом сообщении об ошибке
  • выполнять команды PV в пространстве имен по умолчанию с обоими пользователями

Самый полезный комментарий

PV - это объекты с кластерной областью видимости. Их не существует в пространстве имен. Чтобы получить разрешение на использование PV API с RBAC, вам понадобится ClusterRole, привязанная к области кластера с помощью ClusterRoleBinding .

Все 3 Комментарий

У меня аналогичная проблема, когда у меня есть несколько пространств имен, включая dev и default . Как «пользователь-разработчик» я могу создать кучу ресурсов в пространстве имен dev , включая PVC, но создание PV в качестве «пользователя-разработчика» в пространстве имен dev приводит к тому же ошибка, как указано выше:

Error from server (Forbidden): error when creating "db-pv.yaml": the server does not allow access to the requested resource (post persistentvolumes)

Я могу создать PV как пользователь admin в пространстве имен default , и тогда все будет в порядке.

PV не связаны с пространством имен

PV - это объекты с кластерной областью видимости. Их не существует в пространстве имен. Чтобы получить разрешение на использование PV API с RBAC, вам понадобится ClusterRole, привязанная к области кластера с помощью ClusterRoleBinding .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги