k8s RBAC 角色访问控制详解与生产中的实际应用案例

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、k8s简介

2、RBAC简介 

二、RBAC关键资源

1、Role

2、Cluster Role 

3、RoleBinding

4、ClusterRoleBinding 

5、主体(Subject)

三、实际应用 

案例1

案例2


一、前言

1、k8s简介

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

​​

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、RBAC简介 

K8s RBAC(Role-Based Access Control,基于角色的访问控制)是Kubernetes(通常简称为K8s)中用于控制用户对集群资源访问权限的一种机制。RBAC允许管理员通过定义角色(Role)和角色绑定(RoleBinding)来管理用户对集群资源的访问权限。

二、RBAC关键资源

1、Role

在Kubernetes(K8s)中,Role是一种命名空间级别的资源,它允许对命名空间内的资源进行细粒度的访问控制。Role是一组权限的集合,用于给某个Namespace中的资源进行鉴权。具体来说,Role资源类型的rules字段用于定义哪些操作(verbs)可以在哪些资源(resources)上执行。

  • resources字段指定了角色可以访问的资源类型。这些资源类型可以是Kubernetes API中定义的任何资源,例如Pods、Services、Deployments、ConfigMaps等。可以在resources字段中列出多个资源类型,以允许角色访问这些类型的资源。
  • verbs字段定义了角色可以对资源执行的操作。

 

2、Cluster Role 

在Kubernetes(K8s)中,ClusterRole是一种特殊类型的角色,它允许对整个集群中的资源进行授权,而不仅仅是单个命名空间中的资源。与Role对象不同,ClusterRole对象是集群范围的。这意味着ClusterRole对象可以控制整个Kubernetes集群中的资源。

  • ClusterRole通常用于定义对集群级别资源的权限,例如节点(nodes)或持久卷(persistent volumes)。通过ClusterRole,管理员可以授予用户、组或服务帐户对集群级别资源的访问权限,以实现跨命名空间的统一权限管理。
  • 与Role类似,ClusterRole也包含一组规则(rules),用于定义哪些操作(verbs)可以在哪些资源(resources)上执行。这些规则决定了ClusterRole的权限范围。

在实际使用中,管理员通常会创建ClusterRole的定义文件,描述所需的权限,并将其应用于整个集群。然后,通过ClusterRoleBinding,管理员可以将ClusterRole与用户、组或服务帐户绑定在一起,以授予其相应的权限。

ClusterRole是Kubernetes中用于实现集群级别资源访问控制的重要机制,它允许管理员对整个集群的资源进行统一的权限管理。

3、RoleBinding

在Kubernetes(K8s)中,RoleBinding是一种用于绑定角色(Role)和用户、服务账户或组的机制。通过RoleBinding,可以将Role中定义的权限赋予特定的用户、服务账户或组,从而实现对这些实体在K8s集群中的访问控制。

  • RoleBinding可以确保只有经过授权的用户、服务账户或组能够执行特定的操作或访问特定的资源。这提供了一种灵活且安全的方式来管理K8s集群中的权限。
  • RoleBinding通常是在创建Role之后进行的。管理员首先定义Role,指定角色所拥有的权限和操作范围,然后创建RoleBinding,将Role绑定到特定的用户、服务账户或组上。这样,被绑定的实体就会继承Role中定义的权限,并能够在集群中执行相应的操作。
  • RoleBinding可以在特定的命名空间内创建,用于控制该命名空间内的资源访问。同时,K8s也提供了ClusterRoleBinding的概念,用于在集群级别进行角色绑定,从而实现对整个集群资源的访问控制。

RoleBinding是K8s中权限管理的重要组成部分,它通过将角色与实体进行绑定,实现了对集群资源的精细控制,提高了系统的安全性和可靠性。

4、ClusterRoleBinding 

ClusterRoleBinding在Kubernetes(K8s)中,是一种用于绑定ClusterRole(集群角色)到用户、服务账户或组的机制。它与RoleBinding类似,但作用范围更广,适用于整个Kubernetes集群,而不仅仅是特定的命名空间。

通过ClusterRoleBinding,管理员可以将ClusterRole中定义的权限赋予给集群级别的用户、服务账户或组。这意味着被绑定的实体将能够在整个集群范围内执行ClusterRole中定义的操作和访问资源。

ClusterRoleBinding提供了一种集中管理集群级别权限的方式,使得管理员能够更方便地控制哪些实体在集群中拥有哪些权限。它可以帮助确保只有经过授权的用户、服务账户或组能够执行特定的操作或访问特定的资源,从而提高集群的安全性和可靠性。

需要注意的是,与RoleBinding不同,ClusterRoleBinding不局限于特定的命名空间,而是在整个集群范围内生效。这使得它成为管理跨命名空间资源的权限的理想选择。

5、主体(Subject)

在Kubernetes(K8s)的RBAC(基于角色的访问控制)中,主体(Subject)是一个核心概念,它代表了当前与K8s集群交互的实体。这个实体可以是一个具体的用户、一个用户组或一个服务账户。简而言之,Subject就是一个能够发起请求并希望访问K8s资源的实体。

在RBAC模型中,Subject会尝试执行某些操作(如读取、写入或删除资源)。为了判断这些操作是否被允许,系统会首先进行身份验证(Authentication),验证Subject的身份是否合法。如果验证通过,接着系统会进行授权(Authorization),即根据定义好的Role和ClusterRole以及它们与Subject的绑定关系(通过RoleBinding和ClusterRoleBinding),来判断Subject是否拥有执行这些操作的权限。

因此,Subject在RBAC中起到了至关重要的作用,它是访问控制的基础,也是系统判断请求是否合法的依据。管理员通过合理配置Role、ClusterRole、RoleBinding和ClusterRoleBinding,可以实现对Subject的精细权限控制,确保只有经过授权的实体才能访问和操作K8s集群中的资源。

三、实际应用 

案例1

要求:

  1. 创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许对Deployment、
  2. Daemonset.
  3. Statefulset具有create权限,在现有的 namespace app-team1中创建一个名为cicd-token的新 ServiceAccount。
  4. 限于 namespace app-team1中,将新的ClusterRole deployment-custerrole绑定到新的 ServiceAccount cicd-token。

实现:

  1. 创建名为deployment-clusterrole的ClusterRole,授予对Deployment、Daemonset和Statefulset资源对象的create权限。
  2. 在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount。
  3. 将新创建的ClusterRole deployment-clusterrole绑定到新创建的ServiceAccount cicd-token,限制在namespace app-team1中。

示例YAML,用于实现上述步骤:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: deployment-clusterrole
rules:
- apiGroups: [""]resources: ["deployments", "daemonsets", "statefulsets"]verbs: ["create"]---apiVersion: v1
kind: ServiceAccount
metadata:name: cicd-tokennamespace: app-team1---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: cicd-token-deployment-clusterrole
roleRef:kind: ClusterRolename: deployment-clusterroleapiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccountname: cicd-tokennamespace: app-team1


我们可以将以上内容保存为一个YAML文件,然后通过kubectl apply命令将其应用到你的Kubernetes集群中。

案例2

要求:

1. Namespace级别的Role和ServiceAccount绑定:

  • 创建名为deployment-role的Role,授予对Deployment资源的get和list权限。
  • 在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount。
  • 将新创建的Role deployment-role绑定到新创建的ServiceAccount cicd-token,限制在namespace app-team1中。

2. ClusterRole和ServiceAccount的全局绑定:

  • 创建名为read-only-clusterrole的ClusterRole,授予对所有资源对象的get和list权限。
  • 创建名为readonly的新ServiceAccount,无需指定namespace。
  • 将新创建的ClusterRole read-only-clusterrole绑定到新创建的ServiceAccount readonly,使其在整个集群中拥有只读权限。

3. 自定义资源(Custom Resource Definitions)的权限管理:

  • 创建名为crd-admin-clusterrole的ClusterRole,授予对自定义资源对象的管理权限(例如,get、list、create、update、delete)。
  • 在现有的namespace app-team2中创建一个名为crd-admin的新ServiceAccount。
  • 将新创建的ClusterRole crd-admin-clusterrole绑定到新创建的ServiceAccount crd-admin,限制在namespace app-team2中。

实现: 

Namespace级别的Role和ServiceAccount绑定:

# 创建Role
kubectl create role deployment-role --verb=get,list --resource=deployments# 创建ServiceAccount
kubectl create serviceaccount cicd-token -n app-team1# 绑定Role到ServiceAccount
kubectl create rolebinding deployment-rolebinding --role=deployment-role --serviceaccount=app-team1:cicd-token -n app-team1


ClusterRole和ServiceAccount的全局绑定:

# 创建ClusterRole
kubectl create clusterrole read-only-clusterrole --verb=get,list --resource=*# 创建ServiceAccount
kubectl create serviceaccount readonly# 绑定ClusterRole到ServiceAccount
kubectl create clusterrolebinding readonly-clusterrolebinding --clusterrole=read-only-clusterrole --serviceaccount=default:readonly


自定义资源(Custom Resource Definitions)的权限管理:

# 创建ClusterRole
kubectl create clusterrole crd-admin-clusterrole --verb=get,list,create,update,delete --resource=customresourcedefinitions# 创建ServiceAccount
kubectl create serviceaccount crd-admin -n app-team2# 绑定ClusterRole到ServiceAccount
kubectl create clusterrolebinding crd-admin-binding --clusterrole=crd-admin-clusterrole --serviceaccount=app-team2:crd-admin -n app-team2


这些命令将创建相应的角色(Role或ClusterRole)和ServiceAccount,并将角色绑定到ServiceAccount上,以便在Kubernetes集群中控制资源访问权限。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AMBA Bus ACE 总线 6 -- ACE cache maintenance 详细介绍】

文章目录 ACE cache maintenance什么叫 cache maintenance operations呢?ACE cache line statesACE cache maintenance 什么叫 cache maintenance operations呢? 比如ARM CPU 对自己的Icache 和 Dcache会有大量的transaction操作,也即maintenance操作,如果cache 是dirty 话…

Python的历史演变与作用

目录 1.概述 2.起源 3.发展阶段 4.Python 3的诞生 5.现状与未来 6.Python的作用 6.1.Web开发 6.2.数据科学与人工智能 ​​​​​​​6.3.自动化与脚本编程 ​​​​​​​6.4.教育与学习 ​​​​​​​6.5.其他领域 7.结语 1.概述 Python,一门富有表…

26.统一网关Gateway

网关的功能 1.身份认证,权限的校验。 2.服务的路由,负载均衡。用户请求被分配到哪一个微服务。一个微服务可以有多个实例,所以使用负载均衡。 3.请求限流。 springcloud网关实现有两种:gateway, zuul zuul是基于servlet实现的…

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互):字段中 含有 getHeader 字段 的方法: 2.解释前后端的交互过程3.使用 json 格…

币圈是什么意思?币圈开发

币圈是一个涵盖了区块链、加密货币及其应用的独特领域,它的兴起与发展已经彻底改变了我们对金融、科技和未来的认知。 一、什么是币圈? 币圈可以被理解为围绕虚拟货币展开的一系列活动和产业的总称。它包括区块链技术的研发、数字货币的创造、交易、投资…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统:精准匹配旅行者需求 2、定制化旅行计划:满足个性化需求 3、实时互动与分享:增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么? 图像的中值滤波是一种非线性图像滤波方法,它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同,中值滤波不会受到极端值的影响,因此在处…

数据仓库是什么

写在前面 刚接触大数据的新手小白可能会对数据仓库这个词比较陌生,本文将介绍数据仓库的主要特征及OLTP&OLAP的区别,帮助读者更好理解数据仓库。 一、什么是数据仓库 数据仓库,简称数仓,是一个对数据进行加工,集…

YOLOv8 的安装、使用与训练

YOLOV8 YOLOv8简介 YOLOv8是YOLO系列的最新版本,它融合了先进的深度学习技术和目标检测领域的最新研究成果 与其前身相比,YOLOv8在速度和精度方面都有了显著的提升,使其成为一个理想的实时目标检测解决方案。该模型结合了卷积神经网络&…

分段函数拟合-施加分段点连续约束条件|【Matlab源码+视频介绍】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

PotatoPie 4.0 实验教程(27) —— FPGA实现摄像头图像拉普拉斯边缘提取

拉普拉斯边缘提取有什么作用? 拉普拉斯边缘检测是一种常用的图像处理技术,用于检测图像中的边缘和边界。它的主要作用包括: 边缘检测:拉普拉斯算子可以帮助检测图像中的边缘,即图像中亮度快速变化的位置。这些边缘通常…

数据集笔记:处理北大POI 数据:保留北京POI

数据来源:Map POI (Point of Interest) data - Official data of the contest (pku.edu.cn) windows 下载方法:数据集笔记:windows系统下载北大开放数据研究平台的POI数据-CSDN博客 1 读取数据 1.1 列出所有的文件 dir1D:/data/PKU POI/2…

CentOS 9 (stream) 安装 nginx

1.我们直接使用安装命令 dnf install nginx 2.安装完成后启动nginx服务 # 启动 systemctl start nginx # 设置开机自启动 systemctl enable nginx# 重启 systemctl restart nginx# 查看状态 systemctl status nginx# 停止服务 systemctl stop nginx 3.查看版本确认安装成功…

springboot3整合redis

redis在我们的日常开发中是必不可少的&#xff0c;本次来介绍使用spring boot整合redis实现一些基本的操作&#xff1b; 1、新建一个spring boot项目&#xff0c;并导入相应的依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下&#xff1a; 注意 basedir 和 datadi…

[leetcode] B树是不是A树的子结构

给定两棵二叉树 tree1 和 tree2&#xff0c;判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意&#xff0c;空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1&#xff1a; 输入&#xff1a;tree1 [1,7,5], tree2 [6,…

基于深度学习的车牌识别

如果你认为车牌只是车子的‘名字’&#xff0c;那么是时候让你见识一下&#xff0c;当科技赋予它‘超能力’时会发生什么&#xff1f; 上效果图&#xff1b; 这就是车牌识别的力量&#xff0c;下面是主函数代码&#xff1a; # -*- coding: UTF-8 -*- import argparse import …

服务器硬件:裸金属安装 VMware ESXi

写在前面 工作中遇到&#xff0c;简单整理博文内容涉及 裸金属安装VMware ESXi 基本步骤理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上春树 一、准备工作 确…

1. 房屋租赁管理系统(Java项目 springboot/vue)

1.此系统的受众 1.1 在校学习的学生&#xff0c;可用于日常学习使用或是毕业设计使用 1.2 毕业一到两年的开发人员&#xff0c;用于锻炼自己的独立功能模块设计能力&#xff0c;增强代码编写能力。 1.3 亦可以部署为商化项目使用。 2. 技术栈 jdk8springbootvue2mysq5.7&8…

基于SpringBoot + Vue实现的家政服务管理系统设计与实现+毕业论文+答辩PPT+指导搭建视频(包运行成功)

目录 项目介绍 论文展示 资源获取 项目介绍 家政服务管理平台是一个管理信息系统&#xff0c;为了宣传的需要&#xff0c;为了给用户提供方便快捷的服务&#xff0c;从而设计了家政服务管理平台。管理员可以通过这个系统把家政服务信息发布出去&#xff0c;可以方便用户快…