3 回答
TA贡献1898条经验 获得超8个赞
这个问题是权限问题。由于您正在使用rest.InClusterConfig(config)创建客户端。这意味着它使用 pod 的服务帐户作为凭证。因此,请检查该服务帐户是否具有在任何命名空间中获取 pod 的权限。
如果 pod 中的服务帐户未定义,则它将使用default服务帐户。
如果您的集群中启用了 RBAC,则检查该命名空间中的角色绑定,以确定您的服务帐户是否具有权限。
# to see the list of role bindings in 'default' namespace
kubectl get rolebindings --namespace default
查看具体rolebinding
kubectl get rolebindings ROLE-BINDING-NAME --namespace default -o yaml
您还可以创建角色和角色绑定以授予权限。
TA贡献1780条经验 获得超5个赞
以下是我在 minikube 集群上使用的方法,使默认服务帐户能够访问公共资源上的 crud 操作。明显的警告是您需要在真实集群上小心。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: crud-role
namespace: default
rules:
- apiGroups: ["", "apps", "batch"]
resources: [ "deployments", "jobs", "pods", "replicasets", "services" ]
verbs: [ "create", "get", "list", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: crud-role-binding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: crud-role
subjects:
- kind: ServiceAccount
name: default
namespace: default
TA贡献1765条经验 获得超5个赞
我收到了类似的错误,但是来自在默认命名空间中使用 golang 客户端的 pod:
pods 被禁止:用户“system:serviceaccount:default:default”无法在集群范围内列出 API 组“”中的资源“pods”
戈兰代码片段:
if configMode == "IN_CLUSTER" {
// creates the in-cluster config
config, err := rest.InClusterConfig()
if err != nil {
panic(err.Error())
}
return config, err
}它仅针对获取和列表进行了修改:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: query-role
namespace: default
rules:
- apiGroups: ["", "apps", "batch"]
resources: [ "deployments", "jobs", "pods", "replicasets", "services" ]
verbs: [ "get", "list" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: query-role-binding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: query-role
subjects:
- kind: ServiceAccount
name: default
namespace: default
- 3 回答
- 0 关注
- 109 浏览
添加回答
举报