API Server使用以下几种授权策略,通过API Server的启动参数 --authorization-mode
设置
- AlwaysDeny:表示拒绝所有请求。仅用于测试
- AlwaysAllow:表示允许所有请求。如果有集群不需要授权流程,则可以采用该策略
- Node:节点授权是一种特殊用途的授权模式,专门授权由 kubelet 发出的 API 请求
- Webhook:是一种 HTTP 回调模式,允许使用远程 REST 端点管理授权
- ABAC:基于属性的访问控制,表示使用用户配置的授权规则对用户请求进行匹配和控制
- RBAC:基于角色的访问控制,默认使用该规则
RBAC(Role-Based Access Control)基于角色的访问控制,在Kubernetes 1.5 中引入,现为默认标准。
相对其他访问控制方式,拥有如下优势:
- 对集群中的资源和非资源均拥有完整的覆盖
- 整个RBAC完全由几个API对象完成,同其他API对象一样,可以用kubectl或API进行操作
- 可以在运行时进行操作,无需重启API Server
Kubernetes 的 RBAC 流程需要定义三个主要组件
- Subject
- Rule
- Rolebinding
Subject 即 实际需要被检查的对象,包含 user (Kubernetes User Account)、service account(Kubernetes Service Account) 和 group
Rule 是一组包含了类似 CRUD 动作的列表,还包含一些kubernetes附加的功能,watch、list 和 exec。kubernetes使用 Role(Kubernetes Role & ClusterRole)来定义 Rule 的适用范围。