zoukankan      html  css  js  c++  java
  • kubernetes之RBAC介绍

    一.RBAC简单说明

    在kubernetes中,授权有6种模式:

    • ABAC(基于属性的访问控制)
    • RBAC(基于角色的访问控制)
    • Webhook
    • Node
    • AlwaysDeny(一直拒绝)
    • AlwaysAllow(一直允许)
      从1.6版本起,kubenetes默认启用RBAC访问控制策略,从1.8开始,RBAC已作为稳定的功能,通过设置-authorization-mode=RBA,启用RBAC。在RBAC API中,可以通过如下的步骤进行授权:
      1)定义角色:在定义角色时,会指定此角色对于资源的访问控制的规则。
      2)绑定角色:将主体与角色进行绑定,对角色进行访问授权。

    二.详细介绍

    2.1 角色和集群角色

    在RBAC API中,角色包含代表权限集合的规则。在这里,权限只有被授予,没有被拒绝的设置。在kubernetes集群中有两种角色,即:

    • 普通角色
      可以通过Role定义一个在命名空间的角色。一个角色只能被用来授予访问单一命名空间中的资源。具体可以参考如下:
      kind: Role
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        namespace: default
        name: pod-role-read
      rules:
      - apiGroups: [""] # "" indicates the core API group
        resources: ["pods"]
        verbs: ["get", "watch", "list"]
      
    • 集群角色
      使用ClusterRole定义集群范围的角色。集群角色(ClusterRole)能够被授予如下资源的权限:
      1.集群范围的资源(类似于Node)
      2.非资源端点(类似于"/healthz")
      3.集群中所有命名空间的资源(类似Pod)
      下面是授予集群角色读取秘钥字典文件访问权限示例:
      kind:ClusterRole
      apiVersion:rbac.authorization.k8s.io/v1
      metadata:
        # "namespace" omitted since ClusterRoles are not namespaced
        name:secret-read
      rules:
      - apiGroups:[""]
        resources:["secrets"] #明确资源类型
        verbs:["get","watch","list"]
      

    2.2 角色绑定和集群角色绑定

    角色绑定用于将角色与一个或一组用户进行绑定,从而实现对用户进行授权的目的。主体分为用户、组和服务账户。
    角色绑定分为:

    • 普通角色绑定
      角色绑定只能引用同一个命名空间下的角色。
      示例:下面的例子中,在default的命名空间中角色绑定将"yuhaohao"用户和"pod-role-read"角色进行了绑定,这就授予了"yuhaohao"访问"default"命名空间下的Pod:

      kind:RoleBinding
      apiVersion:rbac.authorization.k8s.io/v1
      metadata:
        name:read-pods
        namespace:default
      subjects: #主体
      - kind:User
        name:yuhaohao
        apiGroup:rbac.authorization.k8s.io
      roleRef: #引用的角色
        kind:Role
        name:pod-role-read
        apiGroup:rbac.authorization.k8s.io
      

      角色绑定也可以通过引用集群角色授予访问权限,但主体对资源的访问权限仅限于本命名空间。这就允许管理员定义整个集群的公共角色集合,然后在多个命名空间中进行复用。
      示例:下面的角色绑定引用了集群角色,但是"yuhaohao"用户只能读取"business"命名空间下的secret资源:

      kind:RoleBinding
      apiVersion:rbac.authorization.k8s.io/v1
      metadata:
        name:read-secrets
        namespace:business# This only grants permissions within the "business" namespace.
      subjects:
      - kind:User
        name:yuhaohao
        apiGroup:rbac.authorization.k8s.io
      roleRef:
        kind:ClusterRole
        name:secret-read
        apiGroup:rbac.authorization.k8s.io
      
    • 集群角色绑定
      集群角色可以用来在集群层面和整个命名空间下进行授权。
      示例:下面的例子可以允许在"yuhaohao"组的用户能够访问到所有命名空间下的秘钥资源:

      kind:ClusterRoleBinding
      apiVersion:rbac.authorization.k8s.io/v1
      metadata:
        name:read-secrets-global
      subjects:
      - kind:Group
        name:yuhaohao
        apiGroup:rbac.authorization.k8s.io
      roleRef:
        kind:ClusterRole
        name:secret-read
        apiGroup:rbac.authorization.k8s.io
      

    2.3 资源

    在kubernetes集群中,主要包含:Pod、Node、Service、Deployment、Namespace、Secret、Configmap等资源。另外有些资源下面存在子资源,例如Pod下就存在log子资源:```

    GET /api/v1/namespaces/{namespace}/pods/{name}/log
    

    下面的示例中,pod-and-log-role角色能够对"pods"和"pods/log"进行访问:

    kind:Role
    apiVersion:rbac.authorization.k8s.io/v1
    metadata:
     namespace:default
     name:pod-and-pod-role
    rules:
    - apiGroups:[""]
      resources:["pods","pods/log"]
      verbs:["get","list"]
    

    这里还可以通过resourceNames指定特定的资源实例,以限制角色对实例的访问控制:

    kind:Role
    apiVersion:rbac.authorization.k8s.io/v1
    metadata:
      namespace:default
      name:configmap-updater
    rules:
    - apiGroups:[""]
      resources:["configmaps"]
      resourceNames:["my-configmap"]
      verbs:["update","get"]
    

    2.4 主体

    RBAC授权的主机可以是组、用户或服务账户。用户通过字符串标识,例如"yuhaohao"等,具体的形式取决于管理员在认证模块中所配置的用户名。
    "system:"被保留作为用于kubernetes系统使用,因此不能作为用户的前缀,组也有认证模块提供,格式与用户类似。
    在角色绑定主体的例子:

    • 名称为"yuhaohao"用户:

      subjects:
      - kind:User
        name:"yuhaohao"
        apiGroup:rbac.authorization.k8s.io
      
    • 名称为"yuhao"的组:

      subjects:
      - kind:Group
        name:"yuhao"
        apiGroup:rbac.authorization.k8s.io
      
    • 在kube-system命名空间中,名称为"default"的服务账户

      subjects:
      - kind:ServiceAccount
        name:default
        namespace:kube-system
      
    • 在business命名空间中,所有的服务账户

      subjects:
      - kind:Group
        name:system:serviceaccounts:business
        apiGroup:rbac.authorization.k8s.io
      
    • 所有的服务账户

      subjects:
      - kind:Group
        name:system:serviceaccounts
        apiGroup:rbac.authorization.k8s.io
      
    • 所有被认证的用户(K8S 1.5+)

      subjects:
      - kind:Group
        name:system:authenticated
        apiGroup:rbac.authorization.k8s.io
      
    • 所有未被认证的用户(K8S 1.5+)

      subjects:
      - kind:Group
        name:system:unauthenticated
        apiGroup:rbac.authorization.k8s.io
      
    • 所有的用户(K8S 1.5+)

      subjects:
      - kind:Group
        name:system:authenticated
        apiGroup:rbac.authorization.k8s.io
      - kind:Group
        name:system:unauthenticated
        apiGroup:rbac.authorization.k8s.io
      

    本文参考链接:https://www.kubernetes.org.cn/4062.html

  • 相关阅读:
    灰姑娘的水晶鞋(NOIP模拟赛Round 7)
    小红帽的画笔(NOIP模拟赛Round 7)
    YYH的球盒游戏(NOIP模拟赛Round 6)
    YYH的营救计划(NOIP模拟赛Round 6)
    imrersize函数
    数字图像基础知识之灰度图像,彩色图像和矩阵
    灰度变换之彩色变灰色
    数字图像基础知识
    灰度变换之灰度线性拉伸(算法1)
    C结构体变量2种运算(比如链表的结点)(区别与java)
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/12986175.html
Copyright © 2011-2022 走看看