Failed to list *v1.StorageClass: storageclasses.storage.k8s.io is forbidden: User "system:serviceaccount:default:nfs-client-provisioner" cannot list resource "storageclasses" in API group "storage.k8s.io" at the cluster scope: RBAC: clusterrole.rbac.authorization.k8s.io "nfs-client-provisioner-role" not found的yaml怎么写
时间: 2024-03-23 20:38:40 浏览: 558
可以按照以下步骤创建一个 ClusterRole,并将其与 ServiceAccount 绑定来解决这个问题:
1. 创建一个 ClusterRole 的 YAML 文件,例如 nfs-client-provisioner-role.yaml,内容如下:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: nfs-client-provisioner-role
rules:
- apiGroups: [""]
resources: ["persistentvolumes", "persistentvolumeclaims"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
```
该 YAML 文件中定义了一个 ClusterRole,名称为 nfs-client-provisioner-role,它允许 ServiceAccount 访问 Kubernetes API 中的 persistentvolumes、persistentvolumeclaims 和 storageclasses 资源。
2. 创建一个 ClusterRoleBinding 的 YAML 文件,例如 nfs-client-provisioner-rolebinding.yaml,内容如下:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: nfs-client-provisioner-rolebinding
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-role
apiGroup: rbac.authorization.k8s.io
```
该 YAML 文件中定义了一个 ClusterRoleBinding,名称为 nfs-client-provisioner-rolebinding,它将 ServiceAccount nfs-client-provisioner 绑定到 ClusterRole nfs-client-provisioner-role 上。请注意,这里的 ServiceAccount 名称和 Namespace 需要根据实际情况进行调整。
3. 应用这两个 YAML 文件:
```bash
$ kubectl apply -f nfs-client-provisioner-role.yaml
$ kubectl apply -f nfs-client-provisioner-rolebinding.yaml
```
4. 重启应用程序的 Pod,使其能够使用新的 ServiceAccount。
在这个过程中,我们创建了一个新的 ClusterRole,将它与 ServiceAccount 绑定,赋予了 ServiceAccount 访问 Kubernetes API 中的 persistentvolumes、persistentvolumeclaims 和 storageclasses 资源的权限。
阅读全文