kubernetes 核心技术-集群安全机制 RBAC

news/2025/2/7 23:13:30/

随着 Kubernetes 在企业级应用中的广泛采用,确保集群的安全性变得至关重要。Kubernetes 提供了多种安全机制来保护集群及其资源免受未授权访问和潜在威胁的影响。其中,基于角色的访问控制(Role-Based Access Control, 简称 RBAC)是实现细粒度权限管理的核心组件之一。本文将深入探讨 Kubernetes 中的 RBAC 安全模型,包括其工作原理、配置方式以及最佳实践。

什么是 RBAC?

基本概念

RBAC 是一种访问控制机制,它允许管理员通过定义角色(Roles)和角色绑定(RoleBindings)来指定哪些用户或服务账户可以执行特定的操作。在 Kubernetes 中,RBAC 主要用于控制对 API 资源的访问权限。每个角色包含一组规则,这些规则描述了该角色允许执行的动作(如 get, list, create, update, delete 等)以及适用的资源类型(如 pods, services, deployments 等)。

关键组件

  • Role/ClusterRole:定义了一组权限规则,指定可执行的操作和目标资源。
  • RoleBinding/ClusterRoleBinding:将角色与一个或多个主体(如用户、组或服务账户)关联起来,赋予它们相应的权限。

工作原理

角色定义

在 Kubernetes 中,角色分为两种类型:RoleClusterRole。前者作用范围局限于单个命名空间内,而后者则在整个集群范围内有效。

示例:创建一个命名空间级别的 Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "watch"]

此例子定义了一个名为 pod-reader 的角色,它允许用户对 default 命名空间下的 Pods 执行 get, listwatch 操作。

示例:创建一个集群级别的 ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:# "namespace" omitted since ClusterRoles are not namespacedname: secret-reader
rules:
- apiGroups: [""]resources: ["secrets"]verbs: ["get", "list", "watch"]

这个 secret-reader ClusterRole 允许用户在整个集群范围内读取 Secrets。

角色绑定

一旦定义好角色后,接下来就需要通过角色绑定将其与具体的主体关联起来。同样地,角色绑定也分为两类:RoleBindingClusterRoleBinding

示例:为命名空间内的用户分配角色
apiVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read pods in the "default" namespace.
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: jane # Name is case sensitiveapiGroup: rbac.authorization.k8s.io
roleRef:kind: Role # refers to the Role defined abovename: pod-reader # this must match the name of the Role or ClusterRole you want to bind toapiGroup: rbac.authorization.k8s.io

这里我们创建了一个 RoleBinding,使得用户 jane 可以在 default 命名空间中读取 Pods。

示例:为整个集群内的用户分配集群角色
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:name: read-secrets-global
subjects:
- kind: Groupname: manager # Name is case sensitiveapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: secret-readerapiGroup: rbac.authorization.k8s.io

上述代码示例展示了如何使用 ClusterRoleBinding 来给予 manager 组的所有成员全局范围内读取 Secrets 的权限。

实践建议

最小权限原则

始终遵循最小权限原则,即只授予必要的最低限度的权限。避免过度授权,尤其是对于具有较高权限的角色(如管理员角色),应严格限制其使用范围。

定期审计

定期审查现有的角色和角色绑定,确保没有不必要的权限存在,并及时移除不再需要的访问权限。

使用命名空间隔离

利用命名空间划分不同的环境或团队的工作负载,结合 RoleRoleBinding 进行更细粒度的权限控制,减少跨命名空间的权限泄露风险。

结语

感谢您的阅读!如果您对 Kubernetes RBAC 或其他相关话题有任何疑问或见解,欢迎继续探讨。


http://www.ppmy.cn/news/1570173.html

相关文章

使用 postman 测试思源笔记接口

思源笔记 API 权鉴 官方文档-中文:https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图: 对应的xxx,在软件中查看 如上图:在每次发送 API 请求时,需要在 Header 中添加 以下键值对&a…

node.js 08 express的使用和热重载nodemon的安装

一.express的安装和使用 安装 npm i express 使用 //引入express const express require(express)//启动服务器 const app express()//设置get请求地址,获取请求地址信息,和发送返回的数据 app.get(/bailan,(req, res) > {//req.query可以获取到客…

Axure PR 9 动效 设计交互

大家好,我是大明同学。 这期内容,我们来用Axure制作一组动效。 动效 创建动效元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.选中画布,将画布填充颜色设置为蓝色(#0052D9)。 3.在元件库中拖出一个圆形元件,选中矩形元件&…

新到手路由器宽带上网设置八步法

第一步,连接线 运营商接到家里的一般有光纤,然后光纤会接在一个他们提供的光猫上。我们只需将路由器的WAN口通过一截网线接到光猫对应的网口即可。通电并确认指示灯常亮或闪烁 第二步,手机搜索&#xff3…

Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)

本文讲如何在Excel中用切片器做出查询效果。 目录 1,在Excel中用切片器做出查询效果 1-1,Excel 中的切片器是什么? 1-2,用切片器做出查询效果 1),点击任一表格内单元格,按下CtrlA&#xff0…

Django4:模板(上)—常用的标签介绍_django4 标签语法

[for...in...empty](#forinempty_94)[with](#with_104)[url](#url_124)[spaceclass](#spaceclass_152)[autoescape](#autoescape_163)[verbatim](#verbatim_184)模板介绍 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用&am…

GRN前沿:STGRNS:一种基于transformer的可解释方法,用于从单细胞转录组数据推断基因调控网络

1.论文原名:STGRNS: an interpretable transformer-based method for inferring gene regulatory networks from single-cell transcriptomic data 2.发表日期:2023.4.2 摘要: 动机:单细胞RNA测序(scRNA-seq&#xf…

C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程

1. thread对象的析构问题 在 C 多线程标准库中,创建 thread 对象后,必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策,程序将会终止。 然而,在创建 thread 对象后、调用 join 前的代码中&#xff…