如何以小组类型查看主题成员

时间:2018-07-31 12:03:25

标签: kubernetes kubectl rbac

有一个名为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:

2 个答案:

答案 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 #44418RBAC document中找到有关系统组的一些其他信息: