一.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

官网链接:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/

其它优秀博客链接:https://juejin.cn/post/7116104973644988446

kubernetes之RBAC介绍的更多相关文章

  1. Kubernetes 基于 RBAC 的授权(十六)

    目录 一.RBAC介绍 1.1.角色和集群角色 1.2.RoleBinding 和 ClusterRoleBinding 1.3.资源 1.4.主体 二.命令行工具 2.1.kubectl creat ...

  2. RBAC 介绍 (权限)

    RBAC是什么? RBAC是基于角色的访问控制(Role-Based Access Control )在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权 ...

  3. Kubernetes中StatefulSet介绍

    StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...

  4. Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616738 本文出自方志朋的博客 RBAC介绍 RBAC(Role-Based Acce ...

  5. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

  6. 16.kubernetes的RBAC

    role 分为clsterrole和role 我们从普通的role 开始理解起 [root@master ~]# kubectl create role pod-read --verb=get,lis ...

  7. Kubernetes之RBAC

    API Server的授权管理 API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.API Server 目前支持一下几种 ...

  8. 一、Kubernetes系列之介绍篇

      •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什 ...

  9. kubernetes资源类别介绍

    类别 名称 资源对象 Pod.ReplicaSet.ReplicationController.Deployment.StatefulSet.DaemonSet.Job.CronJob.Horizon ...

  10. Django的Rbac介绍2

    上一篇博客我们记录了一下Django中使用Rbac,但是上一篇博客中的方法有一点不好,就是,因为我要在html文件中控制:如果用户有某个权限,则显示这个权限所代表的按钮,但是我现在只有1张表的增删改查 ...

随机推荐

  1. C++ 常用转换API记录

    //wstring转string std::string wstring2string(IN std::wstring& wstr) { std::string result; //获取缓冲区 ...

  2. Delphi 判断字符是否是汉字

    function IsHZ(ch: WideChar): boolean; var i: Integer; begin i := Ord(ch); if (i < 19968) or (i &g ...

  3. 汇编概念辨析(Intel/AT&T syntax、GAS、NASM)

    写在前面 本文并不详细介绍Intel syntax.AT&T syntax.GAS.NASM的具体内容和具体区别,而是从概念辨析的角度说明这些专有名词的含义,以便为初学者扫清疑惑.有兴趣深入了 ...

  4. 【集合分组利器】Java通用集合分组方案

    Java通用集合分组实现方案详解:从基础到高级实践 在Java开发中,对集合中的元素按照特定属性进行分组是一项常见而重要的操作.本文将全面介绍Java中实现集合分组的多种方案,从基础实现到高级用法,并 ...

  5. Dubbo学习系列之十九(Apollo分布式部署)

    说一个人是武林高手:十八般武艺,样样精通!如今,后端技术层出不穷,让人眼花缭乱,如果看官不能达到样样精通,至少 拿起方天画戟能耍几下才行,比如削个苹果.言归正传,配置中心属于基础设施,当然必须玩得溜, ...

  6. C#连接小智服务器并将音频解码播放过程记录

    前言 最近小智很火,本文记录C#连接小智服务器并将音频解码播放的过程,希望能帮助到对此感兴趣的开发者. 如果没有ESP-32也想体验小智AI,那么这两个项目很适合你. 1.https://github ...

  7. Windows端口号操作

    1.查看所有端口号:netstat -ano 2.查看端口号:netstat -ano | findstr "16888" 3.杀死进程:taskkill /f /pid 8524

  8. Asp.net mvc基础(二)Controller给View传递数据的方式

    1.ViewData传值 步骤一:通过在控制器中以键值对的形式进行赋值 ViewData["键"] = 值 赋值: 调用: 2.ViewBag传值 ViewBag是dynamic类 ...

  9. 再见,SSE!你好,Streamable HTTP!轻松开发 Streamable HTTP MCP Server

    大家好!我是韩老师. 之前和大家分享了三篇 MCP 相关的文章: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! 还是 ...

  10. Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板

    原创AI实战uniapp+deepseek+vue3跨三端仿DeepSeek/豆包app流式ai对话助手. uniapp-vue3-deepseek 实战2025对话ai大模型,基于Uniapp+Vu ...