具有资源名称和列表对象的 Kubernetes RBAC 角色


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百事可乐,以podresources特定resourceNamep83

要使kubectl get pods -n peps命令正常工作,您需要从Role中删除resourceNamesp83

这种高级验证最好由 OPA 处理,您可以在其中定义细粒度策略。

简短回答:
list(和watch(实际上可以通过其资源名称进行限制,并允许使用metadata.name=...的字段选择器列出(和watch(请求以匹配单个对象(例如,/api/v1/namespaces/$ns/configmaps?fieldSelector=metadata.name=foo

(有关更多详细信息和一些测试,您可以查看此链接:https://github.com/kubernetes/website/pull/29468

@sftim和@liggitt确实提供了很多帮助!

最新更新