大家好!我将成为您在Kubernetes世界中航行的灯塔。🧭 今天,我们将以简单而详细的方式,深入探讨看似复杂但至关重要的Kubernetes认证(Authentication)和授权(Authorization)体系。
Kubernetes集群是一个宝贵的空间,汇集了无数容器和重要的应用程序。我们当然不能让任何人随意进入并操作它,对吧?因此,Kubernetes拥有严格的访问控制系统。
该系统主要分为两个阶段:
- 认证 (Authentication) 👤: “你是谁?”这是身份验证阶段。
- 授权 (Authorization) 🔑: “你是否有权限执行此操作?”这是确认身份的用户被允许执行特定操作的阶段。
在今天的文章中,我们将重点关注第二个阶段——授权(Authorization),即“能做什么?”,并深入探讨各种方法!

⭐ RBAC (Role-Based Access Control): 基于角色的访问控制
“你是‘开发者’角色,所以你只能进入‘开发服务器’。”
这是最广泛使用且Kubernetes官方推荐的方式。它是在组织内部为个人分配角色,并根据该角色预先定义其可以执行的操作(权限)的方式。
🏢 让我们以公司为例:
- 用户(User): 公司员工 🧑💼
- 角色(Role): 像“人事部”、“开发部”、“设计部”这样的职务 🏷️
- 权限(Permission): “人事部”可以查看员工信息,“开发部”可以访问开发服务器 🔑
- 资源(Resource): 员工信息文件、开发服务器 💻
像这样,RBAC不是直接给用户逐一授予权限,而是通过“角色(Role)”这个中间环节来捆绑和管理权限。这使得权限管理更加便捷和直观。例如,当新开发人员入职时,只需授予他“开发部”角色,所有必要的权限就会一次性获得。
RBAC在Kubernetes中通过Role、ClusterRole、RoleBinding、ClusterRoleBinding等对象实现。
🧠 ABAC (Attribute-Based Access Control): 基于属性的访问控制
“你从‘韩国’连接,属于‘管理员’组,现在是‘工作时间’,所以你可以访问‘所有服务器’。”
ABAC比RBAC更进一步,它根据组合了各种属性(Attribute)的策略(Policy)来允许访问,这是一种非常灵活和强大的方式。
这里所说的属性可以非常多样:
- 用户属性: 用户的姓名、角色、所属组、安全等级等
- 资源属性: 文件的类型、敏感度、所有者等
- 环境属性: 连接时间、连接位置(IP地址)、使用的设备等
🎬 让我们以电影院为例:要观看“19岁以上可观看”的电影,必须同时满足[年龄:19岁以上]这个用户属性和[电影等级:19岁]这个资源属性才能入场。
ABAC能够动态组合多个条件,从而实现非常精细的控制,但缺点是策略的创建和管理比RBAC复杂。
🤖 Node Authorization: 节点授权
“1号节点,你只能获取分配给你的Pod信息。其他节点的信息不行!”
顾名思义,这是一种针对节点(Node)的授权模式。确切地说,它是为了授权每个节点上运行的代理kubelet向API服务器发送请求的特殊功能。
集群中每个节点上的工作者kubelet必须不断与中央管理处API服务器通信,以了解在其节点上应该启动哪些Pod,需要哪些配置值(Secret、ConfigMap)等。📞
此时,Node Authorization的作用是严格限制kubelet只能访问与其自身相关的资源。如果A节点的kubelet试图获取与它完全无关的B节点信息,Node Authorization就会以“禁止访问!🛡️”来阻止请求。这是进一步增强集群安全性的重要功能。
Webhook Mode: Webhook模式
“我不确定这个用户是否可以执行此操作……我去问问外部专家!”
这是Kubernetes的授权决策不通过内部处理,而是询问(委托)给外部其他系统的方式。
“Webhook”是指当特定事件发生时,向指定的URL发送HTTP请求。在授权过程中,它按以下方式运作:
- 用户向API服务器请求特定操作。🙋
- Kubernetes API服务器向配置为Webhook模式的外部服务URL发送HTTP请求,其中包含问题:“此用户想要执行此操作,是否可以授权?” ➡️ 外部服务
- 接收到请求的外部服务根据其自身逻辑(例如:与公司内部认证系统集成)检查权限,并响应“是,允许(allow)”或“否,拒绝(deny)”。✅ / ❌
- API服务器接收到外部服务的响应,并最终处理或拒绝用户的请求。
当公司已经建立了复杂的认证/授权系统,或者希望应用Kubernetes基本授权模型难以实现的特殊规则时,这种方式非常有用。
✨ 总结
今天,我们探讨了保护Kubernetes集群安全的守门人——授权(Authorization)的各种方法。
- RBAC: 基于角色的最标准、最易管理的方法
- ABAC: 结合多个属性,实现精细和动态控制的方法
- Node Authorization: 通过限制Kubelet权限来增强节点安全的方法
- Webhook Mode: 将授权决策委托给外部系统的灵活方法
选择哪种方式取决于您的环境和安全要求。但在大多数情况下,从RBAC开始,并根据需要结合其他方式,将是最好的起点。
希望您能让您的Kubernetes集群更加安全和坚固!💪
标签: Kubernetes, Kubernetes, 认证, 授权, 安全, RBAC, ABAC, NodeAuthorization, Webhook, K8s, DevOps
发表回复