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,一经查实,立即删除!

相关文章

【JavaParser笔记04】如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容

这篇文章,主要介绍如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容。 目录 一、JavaParser代码生成 1.1、引入依赖 1.2、生成Java类 1.3、生成属性和setter、

centos学习-网络配置命令-实用技巧

CentOS网络配置命令详解:轻松掌握网络配置技巧 在CentOS服务器的搭建和管理过程中,网络配置是至关重要的一环。良好的网络配置不仅可以确保服务器的稳定运行,还能够保障网络安全和数据传输效率。本文将详细介绍CentOS网络配置命令&#xff0…

【Pytorch报错】RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR

报错信息: File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 297, in _conv_forwardreturn F.conv1d(input, weight, bias, self.stride, RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling cubl…

【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实现的…

如何在vue中写 键盘控制方法

仅使用一个方法块来监听键盘事件并在按下 L 键时输出 "L",您可以直接在组件的 mounted 钩子函数中定义匿名函数来处理键盘事件。这样做可以避免在组件中定义额外的方法,使代码更加简洁。以下是一个简化的示例代码: export default …

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

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

面试经验|Arm机器学习和图形算法工程师——技术经理面

文章目录 题记英国面试框架HR简单沟通技术经理面技术面谈Offer 面试记录自我介绍环节项目机器学习/图像处理/图形学算法如何做超分辨率任务,通常使用什么loss函数输入10个连续的低质量视频帧,如何对画面进行去噪请简述计算光流的过程请简述alpha blendin…

Bun 入门到精通(二)——初始化

bun init 使用 bun init 可以搭建一个新项目,类似于 npm init,同样,bun init 也可以接收 -y/--yes 的参数,同样类似于 npm init -y。 bun init工作原理 先创建一些默认文件 包文件:带 name 属性的 package.json语言…

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

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

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

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

K8s初次入门

初步:搭建k8s集群 k8s 集群主机清单 主机名ip地址master1.50node-00011.51node-00021.52node-00031.53node-00041.54node-00051.55harbor1.30事先准备 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap) 安装工具 dnf install -y kubeadm kubelet ku…

【Python】在 Linux 上安装 Miniconda 的简易指南

如今一个人听歌总是会觉得失落 幻听你在我的耳边轻轻诉说 夜色多温柔 你有多爱我 如今一个人听歌总是会觉得难过 爱已不在这里我却还没走脱 列表里的歌 随过往流动 🎵 许嵩《幻听》 Miniconda 是一个轻量级的 Anaconda 分发版,它提…

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

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

数据仓库是什么

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

Linux的NVM安装

搬运 如何在 Linux 上安装和管理多个版本的 Node.js 想要在 Linux 计算机上安装多个版本的 Node.js?以下是您需要了解的有关 NVM 的信息。 如果您曾经因为没有安装兼容版本的 Node.js 而在运行项目时遇到问题,那么您并不孤单。幸运的是,这个…

YOLOv8 的安装、使用与训练

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

快速了解 git 和 github 是什么,30 分钟速通版

安装 git 安装git和安装node、qq这种软件是一样的,到官网去下载安装就好了,记得选择正确的版本,mac和win需要下载的版本是不一样的。 git下载页面 配置 git 熟悉环境变量的小伙伴应该了解这一步的重要性,如果没有相关经验也不…

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

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