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

news2025/1/6 19:03:28

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

🏅个人专栏:《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-token
  namespace: app-team1

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cicd-token-deployment-clusterrole
roleRef:
  kind: ClusterRole
  name: deployment-clusterrole
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: cicd-token
  namespace: 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.coloradmin.cn/o/1629888.html

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

相关文章

Python_AI库 Pandas的数据结构及基本操作

Python_AI库 Pandas的数据结构及基本操作 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 本文篇幅较长,但比较重要,希望读者可以认真看完并实例运行。 Pa…

python在pyqt5+logging+threading模块实时显示日志

pyqt5logging模块,在界面上实时显示日志 简介代码实现logging.Handler重写界面创建与日志实时打印执行main.py 简介 在写小工具时,使用pyqt5生成界面,在代码中使用logging模块来打印信息,现在希望能将logging打印的信息实时展示在…

Android 开发工具使用

c调试 在NDK调试的时候,如果找不到 符号的话,我们可以在调试配置中添加符号地址的全路径一直到根目录:,xxx/armeabi-v7a: You must point the symbol search paths at the obj/local/ directory. This is also not a …

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,…

路透社:美国SEC将拒绝以太坊ETF

4月25日,据路透社报道,美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示,在最近几周与美国证券交易委员会(SEC)进行了会议之后,美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

windows pytorch安装

安装环境 WindowsAnacondaCudacuDNN Linux和Windows操作系统的安装存在差异,步骤会有所不同,本教程主要针对Windows系统进行示例。 Anaconda集成了许多方便的包和工具,使用会更加方便,特别适合科学计算,深度学习的数…

基于MATLAB野外观测站生态气象数据处理分析

朱老师(副教授):来自国内重点高校,长期从事野外观测站生态气象监测与评估研究,发表SCl论文多篇,主持国家与地方科研项目多个,在生态环境数据处理与分析中具有丰富的实践项目经验。 以野外观测站高频时序生态气象数据为例&#xff…

ssm项目后端如何导出war及前端如何导出静态资源

后端如何导出war包 后端工具:IDEA 2020.1.3 运行我们编写工具maven里面的package 运行成功的日志 我们运行完,会生成一个target文件夹,在这个文件夹里面找到war包即可 前端如何导出静态资源 使用工具:WebStorm 2020.1.3 打开左…

c++的学习之路:28、哈希表

摘要 本章主要是说一下哈希的实现 目录 摘要 一、哈希表 1、哈希概念 2、闭散列 1、节点创建 2、插入 3、查找 4、删除 5、测试 3、开散列 1、创建 2、插入 3、查找 4、删除 5、析构函数 二、map 三、set 四、位图与布隆过滤器 五、代码 test.cpp HashT…

[移动端] “viewport“ content=“width=device-width, initial-scale=1.0“ 什么意思

布局视口, 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body,html {margin: 0;padding: 0;}.box {width: 200px;height: 200px;background-color: pi…

第五十周:文献阅读+IGRA-ISSA-LSTM

目录 摘要 Abstract 文献阅读&#xff1a;基于IGRA-ISSA-LSTM模型的水质预测 现有问题 提出方法 方法论 灰色关联分析&#xff08;GRA) 改进的灰色关联分析&#xff08;IGRA&#xff09; 麻雀搜索算法&#xff08;SSA&#xff09; 改进的麻雀搜索算法&#xff08;ISS…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

【机器学习原理】决策树从原理到实践

基于树的模型是机器学习中非常重要的一类模型&#xff0c;最基础的就是决策树&#xff0c;本篇主要讲述决策树的原理和几类最常见的决策树算法&#xff0c;这也是更复杂的树模型算法的基础。 参考文章&#xff1a; 1.CSDN-基于熵的两个模型(ID3,C4.5)比较详细&#xff0c;有数字…

JAVA SWING JTABLE表格,点击表头数据可以排序,且第一二行位置固定,不参与排序

对于JAVA SWING 界面开发&#xff0c;使用表格JTABLE开发过程中&#xff0c;一些情况下可能需要在点击表头时对数据进行排序处理。对于简单的排序处理&#xff0c;jtable的setAutoCreateRowSorter方法可满足&#xff0c;但是对于高要求的排序&#xff0c;则满足不了。 比如&am…

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

base64练习

找到password 搜索台搜索password 找到关于password关于base64算法的代码打上断点 点到这个位置在会有一个地址弹出来点击进去 缩小复制 粘贴 运行出数据&#xff0c;成功完成分析

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

新版运营级限速网盘系统源码 带教程

支持用户使用微信扫码登录&#xff0c;上传文件分享链接可自定义&#xff0c;文件可一键保存到我的网盘&#xff0c;支持微信跟支付宝官方接口&#xff0c;易支付接口不强制可自定义&#xff0c;系统整体的架构安全度升级。学习地址

GraspNet-1Billion 论文阅读

文章目录 GraspNet-1Billion总体数据集评价指标网络pointnet&#xff1a;Approach Network:Operation Network&#xff1a;Tolerance Network 摘要相关工作基于深度学习的抓取预测算法抓取数据集点云深度学习 GraspNet-1Billion CVPR2020 上海交大 论文和数据集地址&#xff1…

Python爬虫--Scrapy框架安装

Scrapy框架安装 &#xff0c; Scrapy 是 Python 领域专业的爬虫开发框架&#xff0c;已经完成爬虫程序的大部分通用工具 它使用了 Twisted 异步网络库来处理网络通讯。整体架构大致如下 第一步&#xff1a;挂小灰机或者将要安装的文件下载到本地 Scrapy 框架安装踩坑中 为什…