Kubernetes: RBAC 持久卷不适用于命名空间

创建于 2016-12-19  ·  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", Platform:"darwin/amd64"}
服务器版本:version.Info{Major:"1", Minor:"5+", GitVersion:"v1.5.1-3+10e41f22e4421c", GitCommit:"10e41f22e4421c9a14e9e6782c6375c199a07a6Date2:"GitTreeState2:" -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

所以我们有两个不同的用户:clusteradmin,可以访问 kube 集群中的所有内容,defaultadmin,应该可以访问 default 命名空间中的所有资源。 使用 clusteradmin 执行 PV 命令工作正常,在默认命名空间中使用 defaultadmin 时会出现错误:

kubectl 获取 pv
来自服务器的错误(禁止):服务器不允许访问请求的资源(获取持久卷)

来自服务器的错误(禁止):创建“db-pv.yaml”时出错:服务器不允许访问请求的资源(postpersistentvolumes)

您期望发生的情况:defaultadmin 应该可以访问已定义(在我的情况下为默认)命名空间中的 PV 资源,因为 cluster-admin clusterrole 说明如下:

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

这里重要的是资源*,但感觉PV不是通配符的一部分。

如何重现它(尽可能少且精确):

  • 启用 RBAC
  • 创建两个用户, clusteradmin 和 defaultadmin
  • 添加之前在此错误票证中提到的 clusterrolebinding 和 rolebinding
  • 与两个用户在默认命名空间中执行 PV 命令

最有用的评论

PV 是集群范围的对象。 它们不存在于命名空间中。 要获得通过 RBAC 使用 PV API 的权限,您需要在集群范围内使用 ClusterRoleBinding 绑定一个ClusterRole

所有3条评论

我有一个类似的问题,我有几个命名空间,包括devdefault 。 作为“开发用户”,我可以在dev命名空间中创建一堆资源,包括一个 PVC,但是在dev命名空间中以“开发用户”身份创建 PV 会产生相同的结果错误如上:

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

我可以在default命名空间中以管理员用户身份创建 PV,然后一切正常。

PV 未连接到命名空间

PV 是集群范围的对象。 它们不存在于命名空间中。 要获得通过 RBAC 使用 PV API 的权限,您需要在集群范围内使用 ClusterRoleBinding 绑定一个ClusterRole

此页面是否有帮助?
0 / 5 - 0 等级