Версия 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 "}
Окружающая среда :
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 не является частью подстановочного знака.
Как это воспроизвести (максимально минимально и точно):
У меня аналогичная проблема, когда у меня есть несколько пространств имен, включая 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 .
Самый полезный комментарий
PV - это объекты с кластерной областью видимости. Их не существует в пространстве имен. Чтобы получить разрешение на использование PV API с RBAC, вам понадобится ClusterRole, привязанная к области кластера с помощью ClusterRoleBinding .