Kubectl命令返回Kubernetes中所有用户账户列表

9

我想要从Kubernetes中输出一个逗号分隔的用户账户列表。

我知道可以使用'kubectl get namespace'和'kubectl get pods'命令从Kubernetes返回名称空间、pod等列表。但是,是否有相应的命令以返回Kubernetes用户列表呢?

目前,我可以通过我们的管理平台Rancher在Kubernetes内看到所有用户账号及其相应的名称、电子邮件和ID列表。但问题是,我似乎找不到通过Kubectl或Powershell命令行返回这些用户的逗号分隔列表的方法。

5个回答

7

这真的取决于您的k8s设置和rbac模型。

我建议您查看这里讨论的对象 https://kubernetes.io/docs/reference/access-authn-authz/rbac/

最终,您可能想要的命令是:

kubectl get clusterroles.rbac.authorization.k8s.io --all-namespaces
kubectl get roles.rbac.authorization.k8s.io --all-namespaces

3
ClusterRoles无论如何都不是命名空间的,而且用户与角色/ClusterRoles也是不同的。这并没有以任何方式回答问题。 - DimiDak

0

在 Kubernetes 的术语中,用户被称为服务帐户。要获取所有命名空间中所有服务帐户的列表,您需要使用以下命令 -

kubectl get serviceaccounts -A

5
那是不正确的。用户与服务帐户不同。 - DimiDak

0

看起来似乎没有集中的方法来查找“服务器”端(集群)上用户的权威列表,而是之前在此页面上提到的建议,即查看单个客户端在其.kube/config文件中设置了哪些用户。正如文档所述:

假定一个独立于集群的服务管理普通用户[...] Kubernetes没有代表普通用户帐户的对象。无法通过API调用将普通用户添加到集群中。

https://kubernetes.io/docs/reference/access-authn-authz/authentication/

据我所知,关于非SA用户的唯一参考似乎只出现在定义RoleBindingClusterRoleBinding时指定“User”时。但是,我的假设是,由于您无法通过正常的API调用添加用户,因此您也很可能无法从API获取“用户”列表。同样,“Kubernetes没有表示普通用户帐户的对象。”
值得一提的是,ChatGPT建议使用kubectl get userskubectl get groups。 我假设它从这篇2021年的Rancher论坛文章中错误地获得了这些建议(您会注意到kubectl“get”命令似乎是以user.rancher.[...]开头的分隔符限定的CRD):https://forums.rancher.com/t/kubectl-command-to-return-a-list-of-all-user-accounts-from-rancher-security-accounts-users/36171 那篇文章中给出的答案也强化了 K8s 文档中的概念。无论如何,在 v1.26 版本中,“用户”概念似乎仍然尽可能地与 Kubernetes 控制平面分离。

-1
您可以使用以下命令获取Kubernetes环境中的用户列表。
kubectl config get-users

10
这只会返回在您本地配置文件中的用户,而不是来自k8s集群本身的用户。 - Pav K.

-2
您可以尝试使用以下命令来打印当前配置中的所有现有用户:
kubectl config view -o json  | jq ".users" | grep "name" | awk '{print $2}' | tr -d "\"" | tr -d ","

4
警告,这只会列出当前kubeconfig中存在的用户,而不是整个集群。 - P....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接