有一个名为ClusterRoleBinding
的默认cluster-admin
。
运行kubectl get clusterrolebindings cluster-admin -o yaml
时,我得到:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: 2018-06-13T12:19:26Z
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
resourceVersion: "98"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin
uid: 0361e9f2-6f04-11e8-b5dd-000c2904e34b
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:masters
在subjects
字段中,我有:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:masters
如何查看system:masters
组的成员?
我读过here关于组的信息,但是我不明白如何看到上面的system:masters
中的示例中谁在组中。
我注意到,当我使用命令/etc/kubernetes/pki/apiserver-kubelet-client.crt
解码
openssl x509 -in apiserver-kubelet-client.crt -text -noout
时,其中包含主题system:masters
,但我仍然不知道该组中的用户是谁:
Issuer: CN=kubernetes
Validity
Not Before: Jul 31 19:08:36 2018 GMT
Not After : Jul 31 19:08:37 2019 GMT
Subject: O=system:masters, CN=kube-apiserver-kubelet-client
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
答案 0 :(得分:1)
诚然,到这里来晚了。
已通读the Kubernetes 'Authenticating' docs。 Kubernetes没有用于定义和控制用户的内置机制(与ServiceAccounts不同,ServiceAccounts用于为Pod提供集群标识,因此可以在其上运行服务)。
这意味着Kubernetes因此没有任何内部数据库可供参考来确定和显示组成员身份。
在较小的群集中,x509证书通常用于验证用户。为此,将API服务器配置为信任CA,然后向用户颁发由该CA签名的证书。正如您所注意到的,如果主题包含“组织”字段,则该字段将映射到Kubernetes组。如果希望用户成为多个组的成员,则可以指定多个“ O”字段。 (顺便说一句,在我看来,使用“ OU”字段会更有意义,但事实并非如此)
在回答您的问题时,似乎在通过证书对用户进行身份验证的群集中,唯一的途径是可以访问已颁发的证书,并检查其中是否存在“ O”字段主题。我想在更高级的情况下,Kubernetes将与诸如AD之类的集中式工具集成在一起,可以从本地查询其组成员身份。
答案 1 :(得分:0)
答案更新:
似乎无法使用kubectl
来完成。在Kubernetes配置中,没有像组这样的对象可以“获取”。
Kubernetes中的组信息当前由Authenticator模块提供,通常只是用户属性中的字符串。
也许您可以从用户证书的主题中获取组列表,或者如果使用GKE,EKS或AKS,则组属性存储在云用户管理系统中。
https://kubernetes.io/docs/reference/access-authn-authz/rbac/ https://kubernetes.io/docs/reference/access-authn-authz/authentication/
可以从ClusterRoleBinding对象请求有关系统组中ClusterRole成员资格的信息。 (例如,对于“ system:masters”,它仅显示cluster-admin ClusterRole):
使用jq:
kubectl get clusterrolebindings -o json | jq -r '.items[] | select(.subjects[0].kind=="Group") | select(.subjects[0].name=="system:masters")'
如果您只想列出名称:
kubectl get clusterrolebindings -o json | jq -r '.items[] | select(.subjects[0].kind=="Group") | select(.subjects[0].name=="system:masters") | .metadata.name'
使用go-templates
kubectl get clusterrolebindings -o go-template='{{range .items}}{{range .subjects}}{{.kind}}-{{.name}} {{end}} {{" - "}} {{.metadata.name}} {{"\n"}}{{end}}' | grep "^Group-system:masters"
可以在GitHub issue #44418或RBAC document中找到有关系统组的一些其他信息: