nfs-client-provisioner Failed to list *v1.PersistentVolume: Unauthorized

1、报错

E0827 09:33:24.574300       1 reflector.go:205] github.com/kubernetes-incubator/external-storage/lib/controller/controller.go:496: Failed to list *v1.PersistentVolumeClaim: Unauthorized

 E0827 09:33:24.654812       1 reflector.go:205] github.com/kubernetes-incubator/external-storage/lib/controller/controller.go:497: Failed to list *v1.PersistentVolume: Unauthorized

这些错误消息表明 nfs-provisioner-01 存储类的provisioner 在尝试列出StorageClass、PersistentVolumeClaim (PVC) 和 PersistentVolume (PV) 时遇到了权限问题。具体来说,provisioner 收到了 “Unauthorized” 错误,这意味着它没有足够的权限执行这些操作。

2 、问题分析

权限不足:

Provisioner 没有足够的权限来列出StorageClass、PVC 和 PV。
这可能是由于provisioner使用的ServiceAccount没有正确的角色或角色绑定。

角色绑定问题:

Role 或 RoleBinding 没有正确地赋予provisioner使用的ServiceAccount。
Role 或 RoleBinding 的权限范围不够宽泛,无法覆盖所需的API资源。

3、 解决方案

检查ServiceAccount:

确认provisioner使用的ServiceAccount是否正确配置。
使用命令 kubectl get sa -n 来查看ServiceAccount的状态。

kubectl get ServiceAccount nfs-client-provisioner -n kube-system -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"nfs-client-provisioner","namespace":"kube-system"}}
  creationTimestamp: "2022-12-21T09:34:32Z"
  name: nfs-client-provisioner
  namespace: kube-system
  resourceVersion: "10516902"
  selfLink: /api/v1/namespaces/kube-system/serviceaccounts/nfs-client-provisioner
  uid: 86570b67-0a59-4c78-af64-7ca9855e11ba
secrets:
- name: nfs-client-provisioner-token-7kptr

检查Role和RoleBinding:

确认provisioner使用的ServiceAccount具有正确的Role和RoleBinding。
使用命令 kubectl get rolebinding -n 和 kubectl get role -n 来查看Role和RoleBinding的状态。

发现都没有对应的配置

创建或更新Role和RoleBinding:

如果没有适当的Role和RoleBinding,请创建它们。
如果已有的Role和RoleBinding权限不足,请更新它们。

示例 YAML 文件
下面是一个示例 YAML 文件,用于创建Role和RoleBinding,以授予provisioner所需的权限:

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: kube-system
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: kube-system
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

应用 YAML 文件
创建Role和RoleBinding:
使用命令 kubectl apply -f <role-and-binding.yaml> 来创建Role和RoleBinding。
检查Role和RoleBinding:
使用命令 kubectl get role nfs-provisioner-role -n 和 kubectl get rolebinding nfs-provisioner-binding -n 来查看Role和RoleBinding的状态。
进一步的步骤
检查provisioner日志:
使用命令 kubectl logs -n 来查看provisioner容器的日志,以确认权限问题是否已解决。
检查Pod状态:
使用命令 kubectl get pods 来查看Pod的状态。
使用命令 kubectl describe pod 来获取Pod的详细信息。
检查PVC状态:
使用命令 kubectl get pvc 来查看PVC的状态。
使用命令 kubectl describe pvc 来获取PVC的详细信息。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值