当客户端发起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。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] #空字符串""表明使用core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]c
(2)ClusterRole:针对集群范围的角色,能访问整个集群的资源。
ClusterRole定义可用于授予用户对某一特定命名空间,或者所有命名空间中的secret(取决于其绑定方式)的读访问权限。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
#鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
(3)RoleBinding:将Role和用户实体绑定,从而赋予用户实体命名空间内的权限,同时也支持ClusterRole和用户实体的绑定。
定义的RoleBinding对象在default命名空间中将pod-reader角色授予用户jane。这一授权将允许用户jane从default命名空间中读取pod。
#以下角色绑定定义将允许用户"jane"从"default"命名空间中读取pod
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
(4)ClusterRoleBinding:将ClusterRole和用户实体绑定,从而赋予用户实体集群范围的权限。
定义的ClusterRoleBinding允许在用户组manager中的任何用户都可以读取集群中任何命名空间中的secret。
#以下"ClusterRoleBinding"对象允许在用户组"manager"中的任何用户都可以读取集群中任何命
名空间中的secret
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io
标签:name,Kubernetes,绑定,用户,rbac,集群,授权,k8s,authorization From: https://blog.51cto.com/key3feng/6532423