Linux 我怎样才能查到;执行官;使用“kubectl auth can-i”进行授权?
如何使用Linux 我怎样才能查到;执行官;使用“kubectl auth can-i”进行授权?,linux,bash,kubernetes,cloud,Linux,Bash,Kubernetes,Cloud,如何使用kubectl auth can-I…检查exec授权 当get、create、delete等被视为动词时,exec则不是,如下所示: $ kubectl --kubeconfig=config-prod.yml auth can-i exec po Warning: verb 'exec' is not a known verb yes exec授权是否包含在另一个授权中,如create?通常是在有人正在创建规则并希望检查哪些动词可用于以下资源时: $ kubectl api-res
kubectl auth can-I…
检查exec
授权
当get
、create
、delete
等被视为动词时,exec
则不是,如下所示:
$ kubectl --kubeconfig=config-prod.yml auth can-i exec po
Warning: verb 'exec' is not a known verb
yes
exec
授权是否包含在另一个授权中,如create
?通常是在有人正在创建规则并希望检查哪些动词可用于以下资源时:
$ kubectl api-resources -o wide | grep pods
pods po v1 true Pod [create delete deletecollection get list patch update watch]
然而,这并不是全部。如果您将使用以下不同的方法:
$ kubectl proxy &
Starting to serve on 127.0.0.1:8001
curl http://localhost:8001/api/v1
{
"kind": "APIResourceList",
"groupVersion": "v1",
"resources": [
{
...
### You will be able to find `pods` and verbs which can be used with pods
{
"name": "pods",
"singularName": "",
"namespaced": true,
"kind": "Pod",
"verbs": [
"create",
"delete",
"deletecollection",
"get",
"list",
"patch",
"update",
"watch"
],
"shortNames": [
"po"
### But also `pod/exec` and `pod/logs`
{
"name": "pods/exec",
"singularName": "",
"namespaced": true,
"kind": "PodExecOptions",
"verbs": [
"create",
"get"
]
},
{
"name": "pods/log",
"singularName": "",
"namespaced": true,
"kind": "Pod",
"verbs": [
"get"
]
在中,您可以找到有关子资源
的信息
在Kubernetes API中,大多数资源都是使用对象名称的字符串表示来表示和访问的,例如Pod的Pod。RBAC引用的资源使用的名称与相关API端点的URL中显示的名称完全相同。一些Kubernetes API涉及子资源,例如Pod的日志
在本文档中,您有一个关于pods/logs
的示例,但对于pods/exec
也有类似的情况
如果要使用命令:
$ kubectl auth can-i create pods/exec
yes
$ kubectl auth can-i get pods/exec
yes
## Or
$ kubectl auth can-i get pods --subresource=exec
yes
$ kubectl auth can-i create pods --subresource=exec
yes
上述输出不包括警告
,因为我使用了动词
(get
和create
)来自pods/exec
)。这是正确的语法,使用动词
,然后使用子资源
为什么两个输出都是“是”
?我使用了一个管理员角色
如果要进行一些测试,可以创建servicecomport
(测试)、Role
和RoleBinding
<代码>角色YAML如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-view-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-exec-view-role
rules:
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get"]
auth can-i
的输出:
$ kubectl auth can-i create pods/exec --as=system:serviceaccount:default:test
no
$ kubectl auth can-i get pods/exec --as=system:serviceaccount:default:test
yes
关于createpods/exec
和getpods/exec
之间的区别,您可以检查github线程。特别是在@liggit:
因此,pods/exec子资源中使用的动词应该只是指示该API端点使用了什么HTTP方法
这就是所有资源谓词的工作方式(使用get映射到特例列表中的特定谓词并监视)。看
因此,构建RBAC角色的管理员需要查看代码并找出websocket exec端点支持哪些HTTP方法
不,子资源和相关动词应包含在API文档中。修复生成器以获取这些子资源是值得讨论的问题
希望它能回答你的问题。如果您还有问题,请告诉我。
kubectl auth can-i exec po
对我来说很好。@Philippe-您没有收到警告吗?如果警告显示,则任何内容都会导致“是”对我没有警告。我的kubectl版本
提供客户端版本:version.Info{Major:“1”,Minor:“19”,GitVersion:“v1.19.7”,GitCommit:“1dd5338295409ed cfff11505e7bb246f0d325d15”,gittrestate:“clean”,BuildDate:“2021-01-13T13:23:52Z”,GoVersion:“go1.15.5.5”,编译器:“gc”,平台:“windows/amd64”}服务器版本:version.Info{{Major:“1”,Minor:“17”,GitVersion:“v1.17.16”,GitCommit:“d88fadbd65c5e8 BDE226330D251766A634C7613B0”,GitTreeState:“clean”,BuildDate:“2020-12-18T15:59:27Z”,GoVersion:“go1.13.15”,Compiler:“gc”,Platform:“linux/amd64”}也许因为我的版本较新,你应该尝试kubectl编写can-i虚拟po
,看看它是否也会说“是”(默认)对于dummy
。它也会对你说是。那么,exec
是pods
的子资源吗?这有点微妙。虽然我认为pods
是对象(或资源),但我不会认为exec
是资源,因为“execute”是一个英语动词。它可能很棘手。如果您查看更多的POD子资源,您将发现pods/attach
,pods/binding
,pods/execution
,pods/proxy
以及其他一些。与其他资源类似,如对象服务/proxy
,服务/status
“使用get映射到特定的动词,如list和watch”,您的意思是HTTP get?关于差异的最后几行取自此处,您可能会发现更准确的解释。