apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: p-viewer-role
namespace: pepsi
rules:
- apiGroups:
- ""
resourceNames:
- p83
resources:
- pods
verbs:
- list
- get
- watch
当我们在角色中使用资源名称时,以下命令有效
kubectl get pods -n pepsi p83
返回正确的值。然而
kubectl get pods -n pepsi
禁止返回。为什么不列出p83
角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: p-viewer-rolebinding
namespace: pepsi
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: p-viewer-role
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: pepsi-project-viewer
namespace: project
这是预期行为。您已经定义了一个role
,其范围限定为namespace
百事可乐,以pod
resources
特定resourceName
p83
。
要使kubectl get pods -n peps
命令正常工作,您需要从Role
中删除resourceNames
p83
这种高级验证最好由 OPA 处理,您可以在其中定义细粒度策略。
简短回答:list
(和watch
(实际上可以通过其资源名称进行限制,并允许使用metadata.name=...
的字段选择器列出(和watch
(请求以匹配单个对象(例如,/api/v1/namespaces/$ns/configmaps?fieldSelector=metadata.name=foo
(有关更多详细信息和一些测试,您可以查看此链接:https://github.com/kubernetes/website/pull/29468
@sftim和@liggitt确实提供了很多帮助!