E23*_*235 14 rbac kubernetes kubectl
有一个默认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
Run Code Online (Sandbox Code Playgroud)
在subjects现场,我有:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:masters
Run Code Online (Sandbox Code Playgroud)
我怎样才能看到小组成员system:masters?
我在这里阅读了有关群组的信息,但是我不明白如何才能像上面的示例那样看到谁在群组中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:
Run Code Online (Sandbox Code Playgroud)
VAS*_*VAS 12
答案更新:
似乎没有办法使用kubectl. 没有像 Group 这样的对象可以在 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")'
Run Code Online (Sandbox Code Playgroud)
如果您只想列出名称:
kubectl get clusterrolebindings -o json | jq -r '.items[] | select(.subjects[0].kind=="Group") | select(.subjects[0].name=="system:masters") | .metadata.name'
Run Code Online (Sandbox Code Playgroud)
使用 go 模板:
kubectl get clusterrolebindings -o go-template='{{range .items}}{{range .subjects}}{{.kind}}-{{.name}} {{end}} {{" - "}} {{.metadata.name}} {{"\n"}}{{end}}' | grep "^Group-system:masters"
Run Code Online (Sandbox Code Playgroud)
有关系统组的一些其他信息可以在GitHub 问题 #44418或RBAC 文档中找到:
clo*_*net 11
诚然,这里的聚会迟到了。
通读Kubernetes 'Authenticating' 文档。Kubernetes 没有用于定义和控制用户的内置机制(与 ServiceAccounts 不同,后者用于为 Pod 提供集群身份,因此服务在其上运行)。
这意味着 Kubernetes 因此没有任何内部数据库可供参考,以确定和显示组成员身份。
在较小的集群中,x509 证书通常用于对用户进行身份验证。为此,API 服务器配置为信任 CA,然后向用户颁发由该 CA 签名的证书。如您所见,如果主题包含“组织”字段,则该字段会映射到 Kubernetes 组。如果您希望用户成为多个组的成员,则指定多个“O”字段。(顺便说一句,在我看来,使用“OU”字段会更有意义,但事实并非如此)
在回答您的问题时,似乎在用户通过证书进行身份验证的集群的情况下,您唯一的途径是访问已颁发的证书,并检查主题中是否存在“O”字段。我猜在更高级的情况下,Kubernetes 将与集中式工具(例如 AD)集成,可以在本地查询组成员资格。
| 归档时间: |
|
| 查看次数: |
4882 次 |
| 最近记录: |