尽管Kubernetes RBAC上有很多文档和示例以及可用于不同资源的动词,但我找不到关于某些动词是否总是组合使用或是否存在单独使用它们的用例的任何规则。特别是,我想知道动词get,list和watch。合并它们有什么用,特别是不合并时有什么用?
有趣的问题,这里有一些想法和实践中的用法示例。
在实践中还有更多示例。例如,您可以浏览浏览默认的ClusterRoles kubectl describe clusterroles
。要了解kubectl在后台请求的API,可以增加日志的详细程度,例如kubectl get pods -w -v 10
。
您希望某人能够阅读他们按名称知道的资源,但不发现其他资源。例如,允许做kubectl get mypod
,但不允许做kubectl get pods
。
例子:
system:node
ClusterRole已经获得,但不是名单上的端点,肺静脉和PVC的权限。system:coredns
ClusterRole已经获得,但不是名单上的节点的权限。system:controller:expand-controller
ClusterRole已经获得,但不是名单上的端点,秘密,和服务权限。允许这样做,例如,kubectl get pods
但不允许这样做kubectl get pod mypod
。这没有多大意义,因为您可以通过get获得的所有信息也都包含在list中。但是,实际上有一些用法。
例子:
system:kube-dns
ClusterRole有列表和手表的端点和服务的权限,但没有得到。system:controller:daemon-set-controller
ClusterRoel有列表和手表的节点上的权限,但没有得到。system:coredns
ClusterRole有列表和手表为端点的权限,命名空间,豆荚和服务,而不是得到。实际上,在大多数情况下,有清单的地方也会有手表。您可以剥夺某人的监视权,以减少etcd上的监视者数量。用户可以执行kubectl get pods
和kubectl get pods mypod
,但不能使用该-w
选项。
如果API不支持监视操作(例如可选的度量标准API),则也很有意义。
例子:
system:controller:persistent-volume-binder
ClusterRole有得到和列表的节点上的权限,但不能看关于用例,这没有多大意义,因为您可以通过get和list获得的所有信息也包含在watch中。我不知道在实践中对此有任何具体用法。
但是,从技术上讲,这是可能的。例如,如果您具有Pod的监视权限,但没有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在监视请求之前分别创建了一个列表和get请求,所以很可能会获取资源的,然后将这些资源包括在后续监视请求中。resourceVersion
注意:这意味着,如果您具有list和watch,则kubectl get pods -w
可以使用,但kubectl get pods mypod -w
不能使用;如果您有get and watch,则kubectl get pods mypod -w
可以使用,但kubectl get pods -w
不能使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句