sri*_*259 2 kubernetes kubectl
我试图了解 kubectl 如何获得运行命令的权限。据我了解,与 kubernetes 集群的所有交互都通过 kube-apiserver。kubectl get pods
因此,当我们从主节点运行 kubectl 命令时,请求将通过 kube-apiserver 进行。
apiserver 进行身份验证和授权并返回结果。kubectl 与任何其他用户或资源一样,也应该与角色和角色绑定相关联,以获取访问集群上资源的权限。如何检查 kubectl 关联到哪个角色和角色绑定?
如果这是一个荒谬的问题,我深表歉意。
这个答案是其他答案的扩展,可以帮助您在使用客户端证书时使用脚本:
如果您使用客户端证书,您的~/.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:"
Run Code Online (Sandbox Code Playgroud)
通过 Docker for Mac 运行 kubernetes 时在我的 Mac 上输出:
Subject: O=system:masters, CN=docker-for-desktop
O
是一个组织,代表 kubernetes 中的一个组。
CN
是通用名称,由 kubernetes 解释为用户。
现在您知道当前正在使用 kubectl 的用户和组。要找出您正在使用哪个(集群)角色绑定,您必须查找已识别的组/用户:
$ group="system:masters"
$ kubectl get clusterrolebindings -o json \
| jq ".items[] | select(.subjects[].name==\"$group\")"
Run Code Online (Sandbox Code Playgroud)
{
"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可以在输出中看到该组与ClusterRole
cluster-admin
. 您可以仔细查看这个 clusterrole 以查看详细的权限:
{
"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
$ kubectl get clusterrole cluster-admin -o yaml
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3411 次 |
最近记录: |