首页 > 其他分享 >第五章 RBAC访问控制

第五章 RBAC访问控制

时间:2022-11-12 22:31:23浏览次数:64  
标签:rbac kind name 访问控制 namespace RBAC 第五章 k8s authorization

Role-Based Access Control,基于角色的访问控制, apiserver启动参数添加--authorization-mode=RBAC 来启用RBAC认证模式,kubeadm安装的集群默认已开启。​​官方介绍​

查看开启:

# master节点查看apiserver进程
$ ps aux |grep apiserver

RBAC模式引入了4个资源类型:

  • Role,角色
    一个Role只能授权访问单个namespace

## 示例定义一个名为pod-reader的角色,该角色具有读取default这个命名空间下的pods的权限
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]

## apiGroups: "","apps", "autoscaling", "batch", kubectl api-versions
## resources: "services", "pods","deployments"... kubectl api-resources
## verbs: "get", "list", "watch", "create", "update", "patch", "delete", "exec"

## https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/

  • ClusterRole
    一个ClusterRole能够授予和Role一样的权限,但是它是集群范围内的。
## 定义一个集群角色,名为secret-reader,该角色可以读取所有的namespace中的secret资源
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
  • Rolebinding
    将role中定义的权限分配给用户和用户组。RoleBinding包含主题(users,groups,或service accounts)和授予角色的引用。对于namespace内的授权使用RoleBinding,集群范围内使用ClusterRoleBinding。
## 定义一个角色绑定,将pod-reader这个role的权限授予给jane这个User,使得jane可以在读取default这个命名空间下的所有的pod数据
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: read-pods
namespace: default
subjects:
- kind: User #这里可以是User,Group,ServiceAccount
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role #这里可以是Role或者ClusterRole,若是ClusterRole,则权限也仅限于rolebinding的内部
name: pod-reader # match the name of the Role or ClusterRole you wish to bind to
apiGroup: rbac.authorization.k8s.io

注意:rolebinding既可以绑定role,也可以绑定clusterrole,当绑定clusterrole的时候,subject的权限也会被限定于rolebinding定义的namespace内部,若想跨namespace,需要使用clusterrolebinding

## 定义一个角色绑定,将dave这个用户和secret-reader这个集群角色绑定,虽然secret-reader是集群角色,但是因为是使用rolebinding绑定的,因此dave的权限也会被限制在development这个命名空间内
apiVersion: rbac.authorization.k8s.io/v1
# This role binding allows "dave" to read secrets in the "development" namespace.
# You need to already have a ClusterRole named "secret-reader".
kind: RoleBinding
metadata:
name: read-secrets
#
# The namespace of the RoleBinding determines where the permissions are granted.
# This only grants permissions within the "development" namespace.
namespace: development
subjects:
- kind: User
name: dave # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
- kind: ServiceAccount
name: dave # Name is case sensitive
namespace: luffy
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io

考虑一个场景: 如果集群中有多个namespace分配给不同的管理员,每个namespace的权限是一样的,就可以只定义一个clusterrole,然后通过rolebinding将不同的namespace绑定到管理员身上,否则就需要每个namespace定义一个Role,然后做一次rolebinding。

  • ClusterRolebingding
    允许跨namespace进行授权
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io

第一章 RBAC访问控制_数据

标签:rbac,kind,name,访问控制,namespace,RBAC,第五章,k8s,authorization
From: https://blog.51cto.com/yht1990/5846826

相关文章

  • 计算机网络:随机访问介质访问控制之令牌传递协议
    在轮询访问中,用户不能随机地发送信息,而要通过一个集中控制的监控站,以循环方式轮询每个结点,再决定信道的分配。当某结点使用信道时,其他结点都不能使用信道。典型的轮询访问介......
  • 一个基于角色的访问控制(RBAC)的简单示例
    关于“基于角色的访问控制”是什么,本文不再赘述,如果不明白,请自行查阅资料了解。本文参考用户·角色·权限·表的设计的思想设计。本文用到的技术有SpringBoot、SpringS......
  • 操作系统学习笔记——第五章 I/O设备管理
    在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。参考书:《操作系统》谌卫军等,清华大学出版社,2012年......
  • 【JavaScript 教程】第五章 字符串01— JavaScript 字符串
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节,我们学习了JavaScript流程中的 continue 语句,错过的小伙伴可以点击文章《​​【JavaScript教程】第四......
  • 第五章 if语句
    5.1案例if中的比较运算符两边要添加空格cars=['audi','bmw','toyota']forcarincars:ifcar=='bmw':print(car.upper())else:print(......
  • 计算机网络:信道划分介质访问控制
    计算机网络:信道划分介质访问控制介质访问控制所要完成的主要任务是:为使用介质的每个结点隔离来自同一信道上其他结点所传送的信号,以协调活动结点的传输。用来决定广播信道中......
  • 包及访问控制权限
    包的概念及打包操作import语句导入包中的类静态导入访问控制权限java命名规范包的概念及打包操作包的概念包的概念其实就是文件夹的意思,和我们windows上的文件......
  • self.init_pp_backend = PandaPowerBackend() TypeError: 'module' object is not cal
    (smaac)young@deeplp:~/mainspace/code/smaac-master$pythontest.py-n=5_run-s=0-c=5modelname: 5_run_0Traceback(mostrecentcalllast): File"test.py",......
  • DRF访问控制(RBAC)、JWT认证
    目录RBACRBAC什么是RBACRBAC是基于角色的访问控制(Role-BasedAccessControl)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极......
  • 13第五章:【01】单例模式
    一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只能提供一个取得其对象实例的方法(静态方法)。......