Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我怎样才能查到;执行官;使用“kubectl auth can-i”进行授权?_Linux_Bash_Kubernetes_Cloud - Fatal编程技术网

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?关于差异的最后几行取自此处,您可能会发现更准确的解释。