zoukankan      html  css  js  c++  java
  • k8s基于RBAC的访问控制(用户授权)

    kubernetes的API Server常用的授权插件有:
       Node、ABAC、RBAC、Webhook
    我们重点说一下RBAC的访问控制逻辑
    RBAC(Role base access control)基于角色的访问控制

    涉及到的资源类型:
     Role                  #角色,基于名称空间下的资源
     RoleBinding           #角色绑定,基于名称空间下的资源
     ClusterRole           #集群角色,基于集群级别下的资源
     ClusterRoleBinding    #集群角色绑定,基于集群级别下的资源
    其中,Role和Role是针对于名称空间级别,授予其所在名称空间范围内的许可权限。
    而ClusterRole和ClusterRoleBinding是针对于集群级别,授予其所在集群范围内的许可权限。

    原理如图:

     1.将user1通过rolebinding绑定到role,则该用户将拥有role定义的权限,但操作范围只能是role所在的名称空间。
      2.将user2通过clusterrolebinding绑定到clusterrole,则该用户拥有clusterrole定义的权限,操作范围是clusterrole所在集群。
      3.将user3通过rolebinding绑定到clusterrole,则该用户拥有clusterrole定义的权限,但操作范围只能是rolebinding所在名称空间。

    使用 k8s资源配置清单的书写格式(yaml文件)的便捷方法,快速获取资源清单的基本框架:
     

    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资源对象。

    资源清单书写格式
    roleclusterrole(两个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

    rolebindingclusterrolebinding(两个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                       #用于绑定的集群中的用户名。


        
       

  • 相关阅读:
    并发编程与高并发学习笔记六
    并发编程与高并发学习笔记五
    并发编程与高并发学习笔记四
    浅谈数据挖掘与机器学习
    IntelliJ Idea常用的快捷键
    单链表的插入,查找,删除
    二叉树的序列化和反序列化及完全二叉树和满二叉树的区别
    二叉树的按层遍历并实现换行
    冒泡排序,选择排序,插入排序,快速排序的比较及优化
    axSpA患者新发炎症更容易发生在既往发生过炎症的区域
  • 原文地址:https://www.cnblogs.com/Smbands/p/10907568.html
Copyright © 2011-2022 走看看