如何验证K8S RBAC Role/ClusterRole的API组、动词及资源命名?
用kubectl服务器端预验证
直接执行kubectl apply --dry-run=server --validate=strict -f your-rbac.yaml,这个命令会让K8S服务器提前做严格校验,能揪出apiGroups格式错误(比如你之前写错的rbac.authorization.k8s.io/v1,正确格式应该不带版本号)、非法verbs值这类问题,还能检查resources是否属于指定的apiGroup。用kubectl auth can-i做权限测试
创建前后都能用这个命令快速验证权限是否生效。比如要检查某个服务账号能不能访问secretproviderclasses,就跑:kubectl auth can-i get secretproviderclasses --as=system:serviceaccount:<命名空间>:<服务账号名>
直接返回yes/no,不用等到实际访问才发现权限失效。用离线工具做本地验证
像kubeconform这类工具,本地就能基于K8S的OpenAPI schema做校验,能检查resources的大小写(K8S资源名统一是小写,大写会被判定为无效资源)、字段格式、合法verbs等。命令示例:kubeconform -schema-location default -f your-clusterrole.yaml查集群API schema确认资源信息
用kubectl get --raw /openapi/v2导出集群的API schema,里面会列出所有合法的apiGroups、resources以及对应的可用verbs,对照着写就能避免拼写或格式错误。
内容的提问来源于stack exchange,提问作者YAZ84

