gpt4 book ai didi

Kubernetes RBAC 动词 : get without list and vice versa? 不带列表观看?

转载 作者:行者123 更新时间:2023-12-02 12:14:54 26 4
gpt4 key购买 nike

虽然有很多关于 Kubernetes RBAC 的文档和示例以及不同资源的可用动词,但我找不到关于某些动词是否总是组合使用或是否有单独使用它们的用例的任何规则。特别是,我想知道动词 get、list 和 watch。组合它们有什么用途,尤其是不组合它们?

  • 是否有允许获取资源而不是列表的用途?
  • 相反,在不允许获取的情况下是否可以使用列表?也许沿着信息稀疏的路线?
  • 获取并列出,但没有 watch ?仅限制受信任的主题和服务帐户以对 API 服务器和 etcd 施加更多压力?
  • 观看没有列表或得到?这不会因为他们是列表观察者而削弱大多数客户吗?
  • 最佳答案

    有趣的问题,这里有一些想法和实践中的用法示例。

    实践中的例子还有很多。例如,您可以通过浏览 kubectl describe clusterroles 来检查默认的 ClusterRoles。 .要查看 kubectl 在后台发出哪些 API 请求,您可以增加日志详细程度,例如,kubectl get pods -w -v 10 .

    获取但不列出

    您希望某人能够读取他们通过名称知道的资源,但不能发现存在哪些其他资源。例如,允许做 kubectl get mypod ,但不是 kubectl get pods .

    例子:

  • system:node ClusterRole 具有获取但不列出端点、PV 和 PVC 的权限。
  • system:coredns ClusterRole 具有获取但不列出节点的权限。
  • system:controller:expand-controller ClusterRole 具有获取但不列出端点、 secret 和服务的权限。

  • 列出但没有得到

    允许做,例如, kubectl get pods但不是 kubectl get pod mypod .它没有多大意义,因为您可以通过 get 获得的所有信息也包含在列表中。尽管如此,在实践中还是有一些用法的。

    例子:
  • system:kube-dns ClusterRole 具有 Endpoints 和 Services 的列表和监视权限,但没有获取。
  • system:controller:daemon-set-controller ClusterRoel 具有节点的列表和监视权限,但没有获取。
  • system:coredns ClusterRole 具有 Endpoints、Namespaces、Pods 和 Services 的列表和监视权限,但没有获取权限。

  • 获取并列出,但不观看

    在实践中,在大多数情况下,有列表的地方也有 watch 。您可以剥夺某人的 watch 以减少 etcd 上的 watchers 数量。用户可以做 kubectl get podskubectl get pods mypod ,但不使用 -w选项。

    如果 API 不支持监视操作(例如可选的指标 API),这也是有意义的。

    例子:
  • system:controller:persistent-volume-binder ClusterRole 具有获取和列出节点的权限,但不能监视

  • 观看,但不获取并列出

    关于用例,它没有多大意义,因为您可以通过 get 和 list 获得的所有信息也包含在 watch 中。我不知道这在实践中的任何具体用法。

    但是,从技术上讲,这是可能的。例如,如果您有 Pod 的观看权限,但没有获取和列表权限,您可以执行以下操作:
    ✅ kubectl get --raw="/api/v1/watch/namespaces/default/pods"
    ✅ kubectl get --raw="/api/v1/watch/namespaces/default/pods/mypod"

    它有效。然而,这些 watch端点已弃用,您应该使用带有 watch 的列表端点参数代替。但这也有效:
    ✅ kubectl get --raw="/api/v1/namespaces/default/pods?watch=true"

    但是,您不能像这样观看单个 Pod,因为 get 端点没有 watch范围。因此,以下内容无效:
    ❌ kubectl get --raw="/api/v1/namespaces/default/pods/mypod?watch=true"

    而且您根本无法使用 kubectl 观看资源。以下失败:
    ❌ kubectl get pods -w
    ❌ kubectl get pods mypod -w

    因为 kubectl 在 watch 请求之前分别做了一个 list 和 get 请求,最有可能得到 resourceVersion然后将包含在后续监视请求中的资源。

    注意:这意味着,如果你有 list 和 watch,那么 kubectl get pods -w有效,但 kubectl get pods mypod -w没有,如果你有得到并观看,那么 kubectl get pods mypod -w有效但 kubectl get pods -w没有。

    关于Kubernetes RBAC 动词 : get without list and vice versa? 不带列表观看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069073/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com