36 K8S 之角色控制访问
DAC(自主访问控制)、MAC(强制访问控制)、RBAC(基于角色的访问控制)和 ABAC(基于属性的访问控制)这 4 种主流的权限管理模型中,Kubernetes 支持使用后两种完成普通账户和服务账户的权限管理,另外支持的权限管理模型还有 Node 和 Webhook 两种。
Kubernetes 系统的 RBAC 授权插件将角色分为 Role 和 ClusterRole 两类,它们都是 Kubernetes 内置支持的 API 资源类型,其中 Role 作用于名称空间级别,用于承载名称空间内的资源权限集合,而 ClusterRole 则能够同时承载名称空间和集群级别的资源权限集合。
Kubernetes 集群用户大体规划为集群管理员、名称空间管理员和用户(通常为开发人员)3 类:
集群管理员可以创建、读取、更新和删除任何策略对象,能够创建命名空间并将其分配给名称空间管理员;此角色适用于在整个集群中管理所有租户或项目的管理员。
名称空间管理员可以管理其名称空间中的用户,此角色适用于特定单一租户或项目的管理员。
开发者用户可以创建、读取、更新和删除名称空间内的非策略对象,如 Pod、Job 和 Ingress 等,但只在它们有权访问的名称空间中拥有这些权限。
RoleBinding 负责在名称空间级别向普通账户、服务账户或组分配 Role 或 ClusterRole,而 ClusterRoleBinding 则只能用于在集群级别分配 ClusterRole。但二者的配置规范格式完全相同,它们没有 spec 字段,直接使用 subjects 和 roleRef 两个嵌套的字段。其中,subjects 的值是一个对象列表,用于给出要绑定的主体,而 roleRef 的值是单个对象,用于指定要绑定的 Role 或 ClusterRole 资源。
启用 RBAC 后,Kubernetes 系统的各核心组件、附加组件,以及由 controller-manager 运行的核心控制器等,几乎都要依赖于合理的授权才能正常运行。因而,RBAC 权限模型为这些组件内置了可获得最小化的资源访问授权的 ClusterRole 和 ClusterRoleBinding。
API Server 中的准入控制器同样以插件形式存在,它们会拦截所有已完成认证的,且与资源创建、更新和删除操作相关的请求,以强制实现控制器中定义的功能,包括执行对象的语义验证和设置缺失字段的默认值等,具体功能取决于 API Server 启用的插件。
使用 LimitRange 资源在每个名称空间中限制每个容器的最小及最大计算资源用量,以及为未显式定义计算资源使用区间的容器设置默认的计算资源需求和计算资源限制。一旦在名称空间上定义了 LimitRange 对象,客户端创建或修改资源对象的操作必将受到 LimitRange 控制器的“验证”,任何违反 LimitRange 对象定义的资源最大用量的请求都将被直接拒绝。
若 Pod 对象设定的 CPU 或内存的 requests 属性值小于 LimitRange 中相应资源的下限,或 limits 属性值大于设定的相应资源的上限,就会触发 LimitRanger 准入控制器拒绝相关的请求。
ResourceQuota 资源能够定义名称空间级别的资源配额,从而在名称空间上限制聚合资源消耗的边界,它支持以资源类型来限制用户可在本地名称空间中创建的相关资源的对象数量,以及这些对象可消耗的计算资源总量等。
ResourceQuota 资源可限制名称空间中处于非终止状态的所有 Pod 对象的计算资源需求及计算资源限制总量。
ResourceQuota 资源还支持为本地名称空间中的 PVC 存储资源的需求总量和限制总量设置限额,它能够分别从名称空间中的全部 PVC、隶属于特定存储类的 PVC 以及基于本地临时存储的 PVC 分别进行定义。
启用 PSP 准入控制器后要部署任何 Pod 对象,相关的 User Account 及 ServiceAccount 必须全部获得了恰当的 Pod 安全策略授权。以常规用户的身份直接创建 Pod 对象时,PSP 准入控制器将根据该账户被授权使用的 Pod 安全策略验证其凭据,若无任何安全策略约束该 Pod 对象的安全性,则创建操作将会被拒绝。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/198a4b33204fc9b74d5efffc8】。文章转载请联系作者。
评论