gpt4 book ai didi

PersistentVolume 的 Kubernetes RBAC 规则

转载 作者:行者123 更新时间:2023-12-01 03:06:29 32 4
gpt4 key购买 nike

我正在尝试为需要持久卷的服务创建 RBAC 角色/规则,但它仍然因禁止错误而失败。

这是我的角色配置:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: logdrop-user-full-access
namespace: logdrop
rules:
- apiGroups: ["", "extensions", "apps", "autoscaling"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["batch"]
resources:
- jobs
- cronjobs
verbs: ["*"]

这是我删减的 PersistentVolume list :
apiVersion: v1
kind: PersistentVolume
metadata:
name: logdrop-pv
namespace: logdrop
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: logdrop
name: logdrop-pvc
hostPath:
path: /efs/logdrop/logdrop-pv

当我尝试应用它时,我得到一个禁止的错误。
$ kubectl --kubeconfig ~/logdrop/kubeconfig-logdrop.yml apply -f pv-test.yml 
Error from server (Forbidden): error when retrieving current configuration of:
Resource: "/v1, Resource=persistentvolumes", GroupVersionKind: "/v1, Kind=PersistentVolume"
Name: "logdrop-pv", Namespace: ""
Object: &{map["apiVersion":"v1" "kind":"PersistentVolume" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"logdrop-pv"] "spec":map["accessModes":["ReadWriteMany"] "capacity":map["storage":"10Gi"] "claimRef":map["name":"logdrop-pvc" "namespace":"logdrop"] "hostPath":map["path":"/efs/logdrop/logdrop-pv"] "persistentVolumeReclaimPolicy":"Retain"]]}
from server for: "pv-test.yml": persistentvolumes "logdrop-pv" is forbidden: User "system:serviceaccount:logdrop:logdrop-user" cannot get resource "persistentvolumes" in API group "" at the cluster scope

在最后一行它特别说 resource "persistentvolumes" in API group "" - 这是我在规则中允许的!

我可以使用同一个 yaml 文件中的管理员凭据创建 PV,并且可以使用 logdrop 权限创建任何其他资源(pod、服务等)。只是 PersistentVolume 由于某种原因不起作用。知道为什么吗?

我正在使用 Kubernetes 1.15.0。

更新:

这是我要求的角色绑定(bind):
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: logdrop-user-view
namespace: logdrop
subjects:
- kind: ServiceAccount
name: logdrop-user
namespace: logdrop
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: logdrop-user-full-access

这不是 ClusterRoleBinding,因为我的意图是让用户只访问一个命名空间 ( logdrop),而不是集群中的所有命名空间。

最佳答案

PV、命名空间、节点和存储是 集群范围 对象。作为最佳实践,为了能够列出/监视这些对象,您需要创建 ClusterRole 并通过 ClusterRoleBinding 将它们绑定(bind)到 ServiceAccount。举个例子;

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: <name of your cluster role>
rules:
- apiGroups: [""]
resources:
- nodes
- persistentvolumes
- namespaces
verbs: ["list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources:
- storageclasses
verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: <name of your cluster role binding>
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: <name of your cluster role which should be matched with the previous one>
subjects:
- kind: ServiceAccount
name: <service account name>

关于PersistentVolume 的 Kubernetes RBAC 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828876/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com