在 Kubernetes 中,关键的安全机制,RBAC(基于角色的访问控制)

RBAC的核心是创建角色(Role/ClusterRole)定义权限,然后通过绑定(RoleBinding、 ClusterRoleBinding)将角色与主体关联。需要根据需求选择适当的作用域(命名空间或集群),合理分配最小必要权限,避免过度授权。用于精细化管理用户、服务账号等对集群资源的访问权限。

使用 ​Role + RoleBinding,限制用户在特定命名空间的操作

#testrole.yaml
apiVersion: rbac.authorization.k8s.io/v1  
kind: Role                               
metadata:
  namespace: default                       # 该 Role 仅在 default 命名空间生效
  name: pod-reader                         # Role 的名称
rules:
- apiGroups: [""]                          # 空字符串表示核心 API 组(Pod、Service 等)
  resources: ["pods"]                      # 授权的资源类型是 Pod
  verbs: ["get", "list", "watch"]          # 允许的操作:查看、列表、只读权限
  • Role:作用于特定命名空间,定义一组权限(如对 Pod、Service 的读写操作)。
  • ClusterRole:作用于集群范围或非资源端点,可授权集群级资源Node、PV(PersistentVolume) 或跨命名空间权限。
#testrolebind.yaml
apiVersion: rbac.authorization.k8s.io/v1  
kind: RoleBinding                          
metadata:
  name: read-pods                         
  namespace: default                       # 该 RoleBinding 仅在 default 命名空间生效
subjects:
- kind: ServiceAccount                     # 绑定的主体类型是服务账号
  name: myapp-sa                           # 服务账号的名称
  namespace: default                       # 必须与 RoleBinding 的命名空间一致
roleRef:
  kind: Role                               # 引用的角色类型是 Role(命名空间级别)
  name: pod-reader                         # 引用的 Role 名称
  apiGroup: rbac.authorization.k8s.io      # 角色所属的 API 组

  • RoleBinding:将 Role 或 ClusterRole 绑定到主体,作用在特定命名空间
  • ClusterRoleBinding:将 ClusterRole 绑定到主体,作用在整个集群

使用 ​ClusterRole + ClusterRoleBinding,授权查看所有命名空间中的资源

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: global-view
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["list"]

复用 ClusterRole 到命名空间

通过 ​RoleBinding 引用 ClusterRole,将集群角色权限限制在单个命名空间内

# 引用 ClusterRole 的 RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: limited-admin
  namespace: dev
subjects:       #主体
- kind: User
  name: dev-user
roleRef:
  kind: ClusterRole
  name: admin  # 预定义 ClusterRole
  apiGroup: rbac.authorization.k8s.io

主体(Subject)​

  • User:外部用户(如通过证书认证)。
  • ServiceAccount:Pod 内使用的内部账号。
  • Group:用户或服务账号的集合,便于批量授权。

ClusterRole

  • view:只读权限。
  • edit:允许修改资源(如创建/删除 Pod)。
  • admin:命名空间的管理员权限。
  • cluster-admin:超级用户权限需通过 ClusterRoleBinding 绑定。

权限检查工具

使用 kubectl auth can-i 验证权限:

kubectl auth can-i delete pods --namespace=test        # 检查当前用户权限
kubectl auth can-i create deployments --as=system:serviceaccount:default:myapp-sa  # 模拟服务账号权限

kubernetes集群使用建议

  • 最小权限原则:仅授予必要权限。
  • 避免使用 cluster-admin:除非绝对需要。
  • 服务账号管理:为每个应用创建专用 ServiceAccount,避免使用默认账号。
  • 定期审计权限kubectl get rolebindings --all-namespaces检查绑定情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值