theget和listRBAC 动词有什么区别?
我在文档中所能找到的就是:“获取(对于单个资源)、列表(对于集合,包括完整的对象内容)”,我发现这些内容严重缺乏。是list的超集get,这意味着如果您有list权限,您可以从中获取所有信息get以及更多信息吗?当我们在做的时候,呢watch?它是否只授予读取更改流而不是完整对象的权限?
sup*_*654 11
实际上,您可以get通过list电话获得通常从电话中获得的所有信息。但是,对list资源拥有权限并不意味着get调用会起作用。您仍然必须使用list调用并以这种方式提取信息。
watch是一个特殊动词,允许您实时查看资源更新。有watch访问,而无需list或者get是不是非常有帮助,因为你将无法查看该资源将更新后。通过kubectl,我无法在无法get访问该资源的情况下观看该资源。
要处理这些角色,我建议您在 Katacoda 上的 Kubernetes 集群中处理角色。
初始设置以创建角色并将其授予(假)用户:
kubectl create role deployment-getter --verb=get --resource=deployment
kubectl create role deployment-lister --verb=list --resource=deployment
kubectl create role deployment-watcher --verb=watch --resource=deployment
kubectl create rolebinding only-get --role=deployment-getter --user=only-get
kubectl create rolebinding only-list --role=deployment-lister--user=only-list
kubectl create rolebinding only-watch --role=deployment-watcher--user=only-list
kubectl run nginx --image=nginx # Make a resource to look at
Run Code Online (Sandbox Code Playgroud)
然后,您可以作为特殊用户之一运行kubectl命令,以查看受限 RBAC 权限的样子。
例如,以下命令表明我们只能使用list动词列出资源。
kubectl get deployment --as list-only # Prints out nginx deployment
kubectl get deployment --as get-only # RBAC error
kubectl get deployment --as watch-only # RBAC error
Run Code Online (Sandbox Code Playgroud)
这个例子表明我们只能用get动词来获取资源(但你也可以通过列出资源来获取类似的信息)。
kubectl get deployment nginx --as get-only -o yaml
# apiVersion: extensions/v1beta1
# kind: Deployment
# ...
kubectl get deployment nginx --as list-only -o yaml # RBAC error
kubectl get deployment --as list-only -o yaml
# apiVersion: v1
# kind: List
# items:
# - apiVersion: extensions/v1beta1
# kind: Deployment
# ...
Run Code Online (Sandbox Code Playgroud)
的get,list和watchRBAC动词授予权限的不同Kubernetes API操作。
您可以在Kubernetes API 参考 中查看每个对象对应的 API 操作,例如,此处为 Deployment。
这里有些例子:
get
如果您拥有getDeployment 资源的权限,则可以执行以下 API 请求:
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
Run Code Online (Sandbox Code Playgroud)
它返回特定部署的清单。
list
如果您有list权限,您可以执行这些 API 请求:
GET /apis/apps/v1/namespaces/{namespace}/deployments
GET /apis/apps/v1/deployments
Run Code Online (Sandbox Code Playgroud)
它们都返回一个部署清单列表。前者是特定命名空间中的所有部署,后者是所有命名空间中的所有部署。
watch
如果您有watch权限,您可以执行这些 API 请求:
GET /apis/apps/v1/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name} [DEPRECATED]
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments [DEPRECATED]
GET /apis/apps/v1/watch/deployments [DEPRECATED]
Run Code Online (Sandbox Code Playgroud)
他们打开一个流连接,当它发生变化时(或当一个新的被创建时),它会返回一个 Deployment 的完整清单。
请注意,不推荐使用后三个 API 端点,您应该使用这些端点来代替list带有watch=true参数的操作。但是,这仍然会触发watchAPI 操作而不是list.
注 1
命令一样kubectl get,kubectl list等刚执行的引擎盖下这些API请求。对于实验,您可以直接执行这些 API 请求。
例如,首先执行:
kubectl proxy
Run Code Online (Sandbox Code Playgroud)
进而:
curl localhost:8001/apis/apps/v1/deployments?watch=true
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用它(不需要kubectl proxy):
kubectl get --raw="/apis/apps/v1/deployments?watch=true"
Run Code Online (Sandbox Code Playgroud)
笔记2
一般来说,许可并不相互暗示。例如,如果您有list权限,并不意味着您可以执行get或watch请求,如果您有watch权限,则不意味着您可以执行get或list请求。
注 3
如果您只有watch权限(但没有getand list),则无法使用 kubectl( kubectl get deployment -w) 进行观看,因为 kubectl 在请求之前分别发出 aget和request(以获取所观看资源的资源版本)。listwatch
此答案中有更多示例。
| 归档时间: |
|
| 查看次数: |
2614 次 |
| 最近记录: |