Azure Kubernetes服务通过RBAC角色实现namespace隔离的可行性咨询
该需求完全可以实现,这是AKS原生支持的标准Kubernetes RBAC能力
你当前遇到的所有用户都能查看全量命名空间的问题,是因为你之前分配的是集群级别的RBAC角色,只要替换为命名空间级别的角色绑定即可实现按部门隔离权限的要求。
前置要求
- 你的AKS集群已开启Kubernetes RBAC(2020年之后创建的AKS集群默认开启该能力)
- 若使用Azure AD账号做身份管理,需要集群提前开启AKS Azure AD集成
操作步骤
- 第一步:创建部门对应的命名空间,示例命令:
kubectl create namespace data kubectl create namespace dev - 第二步:选择适配业务的权限角色,Kubernetes内置3类常用命名空间级权限,按需选用:
view:只读权限,仅允许查看对应命名空间下的所有资源,不支持增删改操作edit:读写权限,支持增删改对应命名空间下除RBAC、资源配额之外的所有工作负载资源admin:命名空间管理员权限,支持管理该命名空间下所有资源,包括RBAC配置、资源配额
- 第三步:创建命名空间级角色绑定,将部门身份和权限、对应命名空间做关联,示例yaml配置如下:
配置写好后执行# 数据部门data命名空间只读权限绑定示例 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: data-team-view-access namespace: data subjects: # 此处根据你的身份来源修改,若为Azure AD组就填组的object ID/显示名,若为单个用户就填用户UPN - kind: Group name: 数据部门用户组ID apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.iokubectl apply -f <配置文件名.yaml>即可生效。开发部门的权限绑定仅需要修改namespace为dev、subjects为开发部门对应的身份标识即可。
验证方法
使用对应部门的账号登录AKS集群,执行kubectl get namespaces,只会返回该账号被授权访问的命名空间,访问未授权的命名空间资源时会直接返回403权限拒绝报错。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

