Kubernetes RBAC动词:不使用列表获取,反之亦然?没有列表的手表?
虽然有很多关于Kubernetes RBAC的文档和示例,以及不同资源的可用动词,但我找不到关于某些动词是否总是组合使用或是否存在单独使用它们的用例的任何规则。特别是,我想知道动词get、list和watch。组合它们有什么用,尤其是不组合它们Kubernetes RBAC动词:不使用列表获取,反之亦然?没有列表的手表?,kubernetes,rbac,Kubernetes,Rbac,虽然有很多关于Kubernetes RBAC的文档和示例,以及不同资源的可用动词,但我找不到关于某些动词是否总是组合使用或是否存在单独使用它们的用例的任何规则。特别是,我想知道动词get、list和watch。组合它们有什么用,尤其是不组合它们 是否允许获取资源,但不允许列表 相反,列表是否有不允许get的用途?也许是信息稀疏 得到并列出,但没有手表?仅限制受信任的主体和服务帐户,从而给API服务器和etcd带来更大的压力 观看没有列表或获得?这不会让大多数客户因为是列表观察者而瘫痪吗 有趣的
- 是否允许获取资源,但不允许列表
- 相反,列表是否有不允许get的用途?也许是信息稀疏
- 得到并列出,但没有手表?仅限制受信任的主体和服务帐户,从而给API服务器和etcd带来更大的压力
- 观看没有列表或获得?这不会让大多数客户因为是列表观察者而瘫痪吗
- 有趣的问题,这里有一些在实践中使用的想法和例子
实践中还有更多的例子。例如,您可以通过浏览
kubectl Descripte ClusterRoles
来检查默认的ClusterRoles。要查看kubectl在后台发出的API请求,可以增加日志的详细程度,例如,kubectl get pods-w-v10
获取但不获取列表
您希望有人能够阅读他们通过名称知道的资源,但不能发现其他资源存在。例如,允许执行kubectl get mypod
,但不允许执行kubectl get pods
示例:
ClusterRole在端点、PV和PVC上具有get权限,但不具有list权限system:node
ClusterRole在节点上具有get但不具有list权限system:coredns
ClusterRole对端点、机密和服务具有get权限,但不具有list权限system:controller:expand controller
kubectl get pod
但不允许执行kubectl get pod mypod
。这并没有多大意义,因为您可以通过get获得的所有信息也包含在列表中。然而,这在实践中有一些用法
示例:
ClusterRole具有端点和服务的列表和监视权限,但没有获取权限system:kube dns
ClusterRoel具有节点的列表和监视权限,但没有getsystem:controller:daemon-set-controller
ClusterRole具有端点、名称空间、POD和服务的列表和监视权限,但没有getsystem:coredns
kubectl get pods
和kubectl get pods mypod
,但不能使用-w
选项
如果API不支持监视操作(例如,可选的度量API),也有意义
示例:
ClusterRole具有节点的get和list权限,但不具有监视权限system:controller:persistent volume binder
✅ 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 get pods -w
❌ kubectl get pods mypod -w
因为kubectl在监视请求之前分别发出一个列表和get请求,很可能是为了获取资源的resourceVersion
,然后这些资源将包含在后续的监视请求中
注意:这意味着,如果你有列表和观看,那么kubectl get pods-w
工作,但是kubectl get pods mypod-w
不工作,如果你有列表和观看,那么kubectl get pods mypod-w
工作,但是kubectl get pods-w
不工作。我的解释(如果有人可以验证的话)即*.list应仅显示可访问的资源列表,而不是整个列表。依我看,显示一张你无法“获取”的物品清单是没有多大意义的。正确的?