kubernetes - Kubernetes RBAC 动词:没有列表,反之亦然?看没有清单?
问题描述
虽然有很多关于 Kubernetes RBAC 的文档和示例以及不同资源的可用动词,但我找不到任何关于某些动词是否总是组合使用或是否有单独使用它们的用例的规则。特别是,我想知道动词 get、list 和 watch。将它们结合起来有什么用途,尤其是不结合它们?
- 是否有允许获取资源但不列出的用途?
- au contraire,是否有用于列表而不允许获取的用途?也许沿着信息稀疏的路线?
- 获取并列出,但没有手表?仅限制受信任的主体和服务帐户以对 API 服务器和 etcd 施加更大的压力?
- 观看没有列表或获取?这不会削弱大多数客户,因为他们是列表观察者吗?
解决方案
有趣的问题,这里有一些想法和实践中的用法示例。
实践中的例子还有很多。例如,您可以通过浏览来检查默认 ClusterRoles kubectl describe clusterroles
。要查看 kubectl 在后台发出哪些 API 请求,您可以增加日志详细程度,例如kubectl get pods -w -v 10
.
获取但不列出
您希望某人能够通过名称读取他们知道的资源,但不发现存在哪些其他资源。例如,允许做kubectl get mypod
,但不允许kubectl get pods
。
例子:
- ClusterRole对 Endpoints、PV 和 PVC
system:node
具有获取但不列出权限。 - ClusterRole对节点
system:coredns
具有获取但不列出权限。 - ClusterRole对 Endpoints、Secrets 和 Services
system:controller:expand-controller
具有获取但不列出权限。
列出但没有得到
例如,允许做,kubectl get pods
但不允许做kubectl get pod mypod
。这没有多大意义,因为您可以使用get 获得的所有信息也包含在list 中。尽管如此,在实践中还是有一些这样的用法。
例子:
system:kube-dns
ClusterRole 具有Endpoints 和 Services的list和watch权限,但没有get。system:controller:daemon-set-controller
ClusterRoel 具有节点的列表和监视权限,但没有获取。system:coredns
ClusterRole 具有Endpoints、Namespaces、Pods 和 Services的list和watch权限,但没有get。
获取并列出,但不观看
实际上,在大多数情况下,有list也有watch。你可以剥夺某人的观察权以减少 etcd 上的观察者数量。用户可以做kubectl get pods
and kubectl get pods mypod
,但不能使用该-w
选项。
如果 API 不支持监视操作也有意义,例如可选的指标 API。
例子:
- ClusterRole对节点
system:controller:persistent-volume-binder
有get和list权限,但没有watch
watch,但不是get和list
关于用例,它没有多大意义,因为您可以使用get和list获得的所有信息也包含在watch中。我不知道这在实践中的任何具体用法。
但是,从技术上讲,这是可能的。例如,如果您对 Pod 有watch权限,但没有get和list,您可以这样做:
✅ 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请求,很可能是为了获取随后将包含在后续watch请求中的资源。resourceVersion
注意:这意味着,如果你有list和watch,那么kubectl get pods -w
工作,但kubectl get pods mypod -w
没有,如果你有get和watch,那么kubectl get pods mypod -w
工作但kubectl get pods -w
没有。
推荐阅读
- java - Kafka 最佳实践 + 如何为 JVM 设置推荐设置
- json - 在领域中存储字典数组的 JSON 响应
- android - 片段内容重叠工具栏和底部导航视图
- javascript - 从局部变量加载 D3
- java - Spring,从其他对象的getter中填充对象的setter
- php - nohup 进程一直关闭
- docker - Docker 文件命令从错误的存储库运行 apt-get update
- java - AppEngine 标准 — 无法设置
在 appengine-web.xml 中为 0 - pyspark - GraphFrames的PageRank错误
- php - PHP GD 库未安装,但实际上已启用