kubernetes的API Server经常使用的受权插件有:
Node、ABAC、RBAC、Webhook
咱们重点说一下RBAC的访问控制逻辑
RBAC(Role base access control)基于角色的访问控制
涉及到的资源类型:
Role #角色,基于名称空间下的资源
RoleBinding #角色绑定,基于名称空间下的资源
ClusterRole #集群角色,基于集群级别下的资源
ClusterRoleBinding #集群角色绑定,基于集群级别下的资源
其中,Role和Role是针对于名称空间级别,授予其所在名称空间范围内的许可权限。
而ClusterRole和ClusterRoleBinding是针对于集群级别,授予其所在集群范围内的许可权限。
原理如图:html
1.将user1经过rolebinding绑定到role,则该用户将拥有role定义的权限,但操做范围只能是role所在的名称空间。
2.将user2经过clusterrolebinding绑定到clusterrole,则该用户拥有clusterrole定义的权限,操做范围是clusterrole所在集群。
3.将user3经过rolebinding绑定到clusterrole,则该用户拥有clusterrole定义的权限,但操做范围只能是rolebinding所在名称空间。
使用 k8s资源配置清单的书写格式(yaml文件)的便捷方法,快速获取资源清单的基本框架:
api
1 建立角色:kubectl ceate role ROLE_NAME --verb=ACTION --resource=KIND --dry-run -o yaml >role-damo.yaml 2 建立角色绑定:kubectl create rolebinding ROLEBINDING_NAME --role=ROLE_NAME --user=USER_NAME --dry-run -o yaml > rolebinding.yaml 3 建立集群角色:kubectl create clusterrole CLUSTERROLE_NAME --verb=ACTION --resource=KIND --dry-run -o yaml > cluster-role.yaml 4 建立集群角色绑定:kubectl create clusterrolebinding CLUSTERROLEBINDING_NAEM --clusterrole=CLUSTERROLE_NAME --user=USER_NAME --dry-run -o yaml > cluster-binding.yaml
注:这些资源对象的修改会当即生效的
--verb:是动做名称如:get,list,watch等。
--resource:是资源类型如:pods,deploy,svc等;注意这里若是写入namespaces是无用的,由于role就是在namespace级别的,而namespaces选项是集群级别的。
--dry-run:运行这条命令,但不生效,经常使用于测试。
--role:是集群中现已存在的role资源对象。
--user:填写集群中现已存在的用户。或建立完rolebinding后建立这个用户。
--clusterrole:是集群中现已存在的clusterrole资源对象。
资源清单书写格式:
role\clusterrole(两个role写法差很少):框架
1 apiVersion: rbac.authorization.k8s.io/v1 2 kind: ClusterRole 3 metadata: 4 name: smbands-cluster-role 5 rules: 6 - apiGroups: #apigroups是包含资源的apigroup的名称。若是指定了多个API组,对其中一个将容许任何API组中的枚举资源。 7 - ""
8 resources: #写资源类型 9 - pods 10 - services 11 - namespaces 12 verbs: #写受权动做 13 - get
14 - list 15 - watch 16 - apiGroups: 17 - extensions 18 resources: 19 - deployments 20 verbs: 21 - get
22 - list 23 - watch
rolebinding\clusterrolebinding(两个binding写法差很少):测试
1 apiVersion: rbac.authorization.k8s.io/v1 2 kind: RoleBinding 3 metadata: 4 name: smbands-binding 5 roleRef: 6 apiGroup: rbac.authorization.k8s.io #apigroup是被引用资源的组。 7 kind: ClusterRole #正在引用的资源类型(role或clusterrole)。 8 name: smbands-cluster-role #定义role或clusterrole时定义的资源名称。 9 subjects: 10 - apiGroup: rbac.authorization.k8s.io #这个apiGroup是参考类,默认对于ServiceAccount是"",默认对于用户或组是"rbac.authorization.k8s.io"
11 kind: User #用户类型:User,Group,ServiceAccount. 12 name: smbands #用于绑定的集群中的用户名。