如何有效限制Kubernetes集群及命名空间、Pod等资源的访问?
问题根因
你当前方案失效和RBAC机制本身无关,核心问题是你未对高权限凭证做收口:普通用户手里持有默认的管理员级kubeconfig(通常是~/.kube/config路径下绑定了cluster-admin角色的凭证),自然可以跳过你生成的单命名空间配置,直接访问全集群资源。
可落地的解决方案
- 收口所有高权限访问凭证
严禁向非管理员用户分发master节点生成的默认管理员kubeconfig,仅向普通用户发放你提前制作的、绑定单命名空间访问权限的专属kubeconfig;同时直接替换用户本机默认的~/.kube/config文件为该受限配置,从源头上避免用户接触到高权限凭证。配置时注意保留正确的集群CA证书,保证用户可正常连接集群,仅身份替换为受限的User或ServiceAccount身份。 - 清理集群内多余的集群级权限绑定
不要仅依赖kubeconfig做权限限制,要在集群侧做权限兜底:排查所有非系统组件的ClusterRoleBinding,清理普通用户、普通用户组绑定的集群级权限(比如cluster-admin、全集群资源查看权限),所有普通用户的RoleBinding仅在授权命名空间内生效。可执行以下命令排查非系统的集群级权限绑定:
排查后仅保留管理员账号/管理员组的集群级权限绑定即可,就算出现凭证泄露,非管理员身份也会被API Server直接拒绝越权请求。kubectl get clusterrolebindings -o wide | grep -v system: - 配置用户本地kubectl默认上下文
给用户分发受限配置后,可直接将受限配置合并到用户本地kubeconfig中,并设置为默认上下文,避免用户切换到高权限上下文,操作命令如下:# 合并受限配置到本地默认kubeconfig KUBECONFIG=~/.kube/config:./developer.kubeconfig kubectl config view --merge --flatten > ~/.kube/config.tmp mv ~/.kube/config.tmp ~/.kube/config # 设置默认使用受限的开发者上下文 kubectl config use-context developer-context - 多租户场景下增加前置访问网关(可选)
如果你集群使用人员复杂、担心高权限凭证私下流转,可以在API Server前部署统一访问入口,所有kubectl请求必须经过网关鉴权,非白名单的管理员请求、跨命名空间访问请求直接拦截,做第二层权限兜底。
提示:RBAC是Kubernetes原生的权限管控机制,只要做好高权限凭证收口、集群侧权限配置正确,完全可以满足单命名空间授权的需求,你之前的问题出在凭证分发管控环节,并非RBAC方案本身无效。
内容的提问来源于stack exchange,提问作者Elpis
相关产品推荐
相关产品推荐

