首页 > 其他分享 >k8s RBAC权限控制

k8s RBAC权限控制

时间:2024-08-04 15:58:55浏览次数:16  
标签:k8s name -- RBAC Role 权限 ClusterRole

前言

在之前的文章中介绍了k8s如何生成一个完整的kubeconfig文件,单纯的生成kubeconfig文件,不对user或group进行权限绑定是无法访问k8s集群的,今天就介绍一下k8s中RBAC鉴权相关的内容

RBAC介绍

基于角色的权限控制,在k8s为了实现这种机制,RBAC API 声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding
k8s的RBAC是白名单机制,想让他具备什么权限,就先创建某个角色Role然后定制rules,再将某个用户user与该role进行绑定bind得到这种绑定关系为RoleBind

ROLE

role 是用来在某个namespace内设置访问权限; 在创建 Role 时,必须指定该 Role 所属的namespace,可以为namespaced级别的资源设置权限,如pods,statefulsets,deployments等

示例

  1. 通过命令行创建
  • --resource: 资源,多个资源以,分割
  • --verb: 对资源的操作权限,包括get,list,watch等等
kubectl create role pod-reader --resource=pods --verb=get,list,watch -n default
  1. 通过yml创建
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" 标明 core API 组
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

ClusterRole

ClusterRole 同样可以用于授予 Role 能够授予的权限。 因为 ClusterRole 属于集群范围,所以它还可以为集群级别的资源设置权限,如Node。
role和clusterrole功能类似,如果需要在namespace内定义角色,应该使用 Role; 如果希望定义集群范围的角色,应该使用 ClusterRole

示例

  1. 通过命令行创建
    参数与Role是一致的,与Role同的是clusterrole是控制集群资源的权限访问
kubectl create clusterrole secret-reader --resource=secrets --verb=get,watch,list
  1. 通过yml创建
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制
  name: secret-reader
rules:
- apiGroups: [""]
  # 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

RoleBinding

角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。 它包含若干主体(Subject)(user、group或serviceaccount)的列表和对这些主体所获得的角色的引用。
一个 RoleBinding 可以引用同一的名字空间中的任何 Role。 或者,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 所在的名字空间。
示例

  1. 通过命令行创建
  • --user: 用户名(也可以使用–group指定用户组)、
  • --role: 角色名
kubectl create rolebinding read-pods --user=user1 --role=pod-reader -n default
  1. 通过yml创建
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pod
# 你需要在该名字空间中有一个名为 “pod-reader” 的 Role
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: User
  name: jane # "name" 是区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  kind: Role        # 此字段必须是 Role 或 ClusterRole
  name: pod-reader  # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
  apiGroup: rbac.authorization.k8s.io
  1. RoleBinding 也可以引用 ClusterRole,以将对应 ClusterRole 中定义的访问权限授予 RoleBinding 所在名字空间的资源。这种引用使得你可以跨整个集群定义一组通用的角色, 之后在多个名字空间中复用
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定使得用户 "dave" 能够读取 "development" 名字空间中的 Secret
# 你需要一个名为 "secret-reader" 的 ClusterRole
kind: RoleBinding
metadata:
  name: read-secrets
  # RoleBinding 的名字空间决定了访问权限的授予范围。
  # 这里隐含授权仅在 "development" 名字空间内的访问权限。
  namespace: development
subjects:
- kind: User
  name: dave # 'name' 是区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding

ClusterRoleBinding可以跨整个集群完成访问权限的授予
示例

  1. 通过命令行创建
kubectl create clusterrolebinding read-secrets-global --user=user1 --clusterrole=secret-reader
  1. 通过yaml创建
apiVersion: rbac.authorization.k8s.io/v1
# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 Secret 资源
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager      # 'name' 是区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

实战

  1. 生成kubeconfig文件,可执行自动生成kubeconfig文件的脚本,参考:https://blog.csdn.net/2401_86274572/article/details/14089867
    在这里插入图片描述

  2. k8s创建一个namespace为demo1,创建一个角色my-role1,赋予角色查看demo1中所有pod的权限

kubectl create ns demo1

在这里插入图片描述

kubectl create role my-role1 -n demo1 --resource=pod --verb=list

在这里插入图片描述
3. 创建一个rolebinding,为用户user1绑定角色my-role1

kubectl create rolebinding my-rolebind1 -n demo1 --user user1 --role my-role1

在这里插入图片描述

  1. 现在可以通过指定kubeconfig去访问k8s的pod资源了
k get pods -n demo1 --kubeconfig=./user1.config 

在这里插入图片描述
5. 因为角色只给了查看demo1中pod的权限,所以如果查看其他资源仍然是没有权限的
如查看demo1中service资源
在这里插入图片描述
或者查看其他namespace中的pod资源
在这里插入图片描述

总结

至此如何创建kubeconfig文件和如何使用RBAC鉴权都介绍过了,这个有啥用呢?
当我们有多套k8s环境时,我们就可以使用kubeconfig合并多个k8s集群进行管理,比较方便

标签:k8s,name,--,RBAC,Role,权限,ClusterRole
From: https://blog.csdn.net/2401_86274572/article/details/140906110

相关文章

  • kubekey是一个k8s轻量工具
    Skiptocontent NavigationMenukubesphere/kubekey    CodeIssues302Pullrequests20DiscussionsActionsProjectsWikiSecurity        masterBreadcrumbskubekey/README_zh-CN.md ......
  • k8s-Pod滚动重启方法
    在Kubernetes中,有多种方法可以进行滚动重启Pod。以下是几种常用的方法:一、通过修改Pod的YAML部署文件进行滚动更新通过修改Pod的YAML部署文件并应用这些更改,可以触发Pod的滚动更新。具体步骤如下:修改Pod的YAML文件,使其内容发生变化(例如更新镜像版本或环境变......
  • 19. rs、deploy和Jenkins集成K8S实现CICD实战
    1.rs控制器1.作用可以实现Pod的副本控制。相比rc资源,其功能性更强且更加轻量级。2.案例1-rs实现类似rc的功能[root@master231rs]#cat01-rs-xiuxian-matchLabels.yamlapiVersion:apps/v1kind:ReplicaSetmetadata:name:rs-xiuxianspec:#指定Pod的副本数量r......
  • BLE属性格式权限属性声明
    前言:BLE属性的分类(四大类):PrimaryService(首要服务项)SecondaryService(次要服务项)Include(包含服务项)Characteristic(特征) 本次主要对属性权限的使用进行描述:先看协议Attributepermissionsareacombinationofaccesspermissions,encryptionpermissions,authentication......
  • Mysql--权限与安全管理
    前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除一、权限表MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库中,由MySQL_install_db脚本初始化。存储账户权限信息的表主要有user、db、host、tables_priv、columns_priv和proc......
  • 【K8s】专题八:Kubernetes 服务调度详解
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录一、基本介绍二、工作原理三、节点绑定四、亲和性调度1、亲和性类型2、亲和性规则3、NodeAffinity4、PodAffinity五、反亲和性调度1、反......
  • root 用户和权限
    目录1.超级管理员root2.切换用户SwitchUser2.1普通用户切换到root用户2.2root用户切换到普通用户3.sudo命令3.1配置认证 无论是Windows,MacOS,Linux均采用多用户的管理模式管理权限;1.超级管理员root在Linux中,最大的系统操作权限的账户名为:root(......
  • k8s
    K8sPod:自主式Pod:死亡后没有控制器将其拉起控制器管理的Pod:死亡后控制器能够将其拉起Pod内容器:当一个Pod创建后,会立即在Pod内创建一个pause容器,该Pod内其他容器公用该容器的网络协议栈;因此,一个Pod中两个容器的端口不能相同,一个容器访问另一个容器的端口,直接用l......
  • 数据权限的设计与思考
    什么是数据权限?权限控制是一个系统的核心功能,可以分为两类,一类是功能权限,一类是数据权限。数据权限又可以进一步分为行级权限和列级权限。功能权限,是指系统用户能进行哪些操作,通常是菜单和按钮权限,如打开订单菜单,查询订单列表,创建新订单。对于功能权限,有标准化的解决方案,也即RBAC......
  • springboot+vue前后端分离项目-项目搭建15-集成JWT token权限验证
    1.对之前的代码改造,之前将user存储到sessionStorage,改成存储到localStorage,全局搜索修改 之前Result.code等于0代表success,改成200代表success,vue文件全局搜索修改一、前端部分1.改造request.js,登录时将user已经存储到localStorage里,这里将user获取到,将user里的token放到......