此答案是对其他答案的扩展,可帮助您在使用客户端证书时使用脚本:
从当前上下文中获取用户和组:
如果您使用客户端证书,您的~/.kube/config 文件包含当前上下文用户的client-certificate-data。该数据是一个base64 编码的证书,可以用openssel 以文本形式显示。您的问题的有趣信息在Subject 部分。
此脚本将打印客户端证书的Subject 行:
$ kubectl config view --raw -o json \
| jq ".users[] | select(.name==\"$(kubectl config current-context)\")" \
| jq -r '.user["client-certificate-data"]' \
| base64 -d | openssl x509 -text | grep "Subject:"
通过 Docker for Mac 运行 kubernetes 时在我的 Mac 上的输出:
Subject: O=system:masters, CN=docker-for-desktop
O 是组织,代表 kubernetes 中的一个组。
CN 是通用名,被 kubernetes 解释为 user。
找到对应的clusterrole和clusterrolebinding:
现在您知道您正在使用 kubectl 的用户和组。
要找出您正在使用哪个(集群)角色绑定,您必须查找已识别的组/用户:
$ group="system:masters"
$ kubectl get clusterrolebindings -o json \
| jq ".items[] | select(.subjects[].name==\"$group\")"
{
"apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRoleBinding",
"metadata": {
"annotations": {
"rbac.authorization.kubernetes.io/autoupdate": "true"
},
"creationTimestamp": "2020-03-31T14:12:13Z",
"labels": {
"kubernetes.io/bootstrapping": "rbac-defaults"
},
"name": "cluster-admin",
"resourceVersion": "95",
"selfLink": "/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin",
"uid": "878fa48b-cf30-42e0-8e3c-0f27834dfeed"
},
"roleRef": {
"apiGroup": "rbac.authorization.k8s.io",
"kind": "ClusterRole",
"name": "cluster-admin"
},
"subjects": [
{
"apiGroup": "rbac.authorization.k8s.io",
"kind": "Group",
"name": "system:masters"
}
]
}
您可以在输出中看到该组与ClusterRole cluster-admin 相关联。您可以仔细查看此集群角色以详细了解权限:
$ kubectl get clusterrole cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: "2020-03-31T14:12:12Z"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
resourceVersion: "42"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin
uid: 9201f311-4d07-46c3-af36-2bca9ede098f
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'