Kubernetes 集群授权管理
当客户端发起 API Server 调用时,API Server 内部要先进行用户认证,然后执行用户授权流程,即通过授权策略来决定一个 API 调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,是权限与安全系统的重要一环。简单地说,授权就是授予不同的用户不同的访问权限。
API Server 目前支持以下几种授权策略(通过 API Server 的启动参数“--authorization mode”设置)。
(1)AlwaysDeny:表示拒绝所有请求,一般用于测试。
(2)AlwaysAllow:允许接收所有请求,如果集群不需要授权流程,则可以采用该策略,这也是 Kubernetes 的默认配置。
(3)ABAC(Attribute-based Access Control,基于属性的访问控制):使用用户配置的授权规则对用户请求进行匹配和控制。
(4)Webhook:通过调用外部 REST 服务对用户进行授权。
(5)RBAC(Role-Based Access Control):基于角色的访问控制,是实施面向企业安全策略的一种有效的访问控制方式。
(6)Node:一种专用模式,用于对 kubelet 发出的请求进行访问控制。
RBAC 是 k8s 提供的一种授权策略,也是新版集群默认启用的方式。RBAC 将角色和角色绑定分开,角色是指一组定义好的操作集群资源的权限,而角色绑定是将角色和用户、组或者服务账号实体绑定,从而赋予这些实体权限。
RBAC 这种授权方式十分灵活,要赋予某个实体权限,只需要绑定相应的角色即可。针对 RBAC 机制,k8s 提供了 4 种 API 资源:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。
(1)Role:只能用于授予对某一单一命名空间中资源的访问权限,因此在定义时必须指定 namespace。
(2)ClusterRole:针对集群范围的角色,能访问整个集群的资源。
ClusterRole 定义可用于授予用户对某一特定命名空间,或者所有命名空间中的 secret(取决于其绑定方式)的读访问权限。
(3)RoleBinding:将 Role 和用户实体绑定,从而赋予用户实体命名空间内的权限,同时也支持 ClusterRole 和用户实体的绑定。
定义的 RoleBinding 对象在 default 命名空间中将 pod-reader 角色授予用户 jane。这一授权将允许用户 jane 从 default 命名空间中读取 pod。
(4)ClusterRoleBinding:将 ClusterRole 和用户实体绑定,从而赋予用户实体集群范围的权限。
定义的 ClusterRoleBinding 允许在用户组 manager 中的任何用户都可以读取集群中任何命名空间中的 secret。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/c643b5d11f6711741176a6865】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论