【Kubernetes】K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)
K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)
- 1.Kubernetes 的鉴权管理
- 1.1 审查客户端请求的属性
- 1.2 确定请求的操作
- 2.基于角色的访问控制(RBAC 鉴权)
- 2.1 基于角色的访问控制中的概念
- 2.1.1 角色
- 2.1.2 角色绑定
- 2.1.3 主体
- 2.2 实现基于角色的访问控制
1.Kubernetes 的鉴权管理
客户端请求通过认证阶段后,将进入鉴权阶段。这个阶段将包含两个内容:
- 1️⃣ 审查客户端请求的属性
- 2️⃣ 确定请求的操作
1.1 审查客户端请求的属性
Kubernetes 审查客户端请求的属性 主要包括以下几个方面。
- 用户与组:经过认证的用户名和所属组名的列表。
- API 和动作:对 Kubernetes 资源的操作,如
create
、list
、get
等请求动词。 - 请求路径和动作:指示各种非 Kubernetes 资源的路径(如
/api
),以及对该路径执行的 HTTP 操作(如 GET、POST、PUT 等)。 - 命名空间:正在访问的 Kubernetes 对象的命名空间。
1.2 确定请求的操作
确定请求的操作 是指,确定对 Kubernetes 资源对象的请求动词或 HTTP 操作,以及该动词或 HTTP 操作是针对单个资源还是一组资源。
下表列举常见的请求动词与 HTTP 操作,以及它们的对应关系。
请求动词 | HTTP 操作 |
---|---|
create | POST |
get 、list | GET、HEAD |
update | PUT |
patch | PATCH |
delete 、deletecollection | DELETE |
根据 Kubernetes 鉴权时使用的模块,可以将 Kubernetes 的鉴权分为以下 4 4 4 种方式:
- 基于 角色 的访问控制(RBAC 鉴权)
- 基于 属性 的访问控制(ABAC 鉴权)
- 基于 节点 的访问控制(Node 鉴权)
- 基于 Webhook 的访问控制
❗ 基于角色的访问控制(RBAC 鉴权)是最重要的鉴权方式。
2.基于角色的访问控制(RBAC 鉴权)
基于角色的访问控制(Role-Based Access Control
,RBAC
),通过为用户赋予不同的角色来控制其访问 Kubernetes 集群资源。它允许用户动态配置不同的角色策略。基于角色的访问控制需要使用 rbac.authorization.k8s.io
API 组来执行。
2.1 基于角色的访问控制中的概念
在基于角色的访问控制中涉及 3 3 3 个非常重要的概念:角色、角色绑定 和 主体。
2.1.1 角色
角色 是一组权限的集合。Kubernetes 中的角色分为两种:Role 和 ClusterRole。
- Role 是某个命名空间中对象访问权限的集合。因此,在创建 Role 时,必须指定 Role 所属的命名空间。
- ClusterRole 是访问某个命名空间的权限的集合。
2.1.2 角色绑定
将包含各种权限的角色授予给一个主体,这个过程被叫作 角色绑定。因为角色分为 Role 和 ClusterRole,所以角色绑定分为 RoleBinding 和 ClusterRoleBinding。
2.1.3 主体
使用角色的用户被叫作 主体(Subject
)。它可以是一个用户(User
)、一个用户组(Group
),也可以是一个服务账号(ServiceAccount
)。
角色与角色绑定存在 3 3 3 种关系:RoleBind-Role
、ClusterRoleBind-ClusterRole
和 RoleBind-ClusterRole
,如下图所示。
下面解释了这 3 3 3 种关系的区别:
User A
通过 RoleBinding 绑定到了 Role 上。因此,它就拥有了命名空间 A 的操作权限。- 在集群 B 上有两个命名空间:命名空间 A 和命名空间 B。
User B
通过 ClusterRolebinding 绑定到 ClusterRole 上,因此它拥有了集群的操作权限(即访问命名空间 A 和命名空间 B)。 User C
在使用 RoleBind 和 ClusterRole 进行绑定时,仅能获取当前名称空间的所有权限(即User C
只能访问命名空间 A)。
角色、角色绑定 和 主体 之间的约束关系如下图所示。
2.2 实现基于角色的访问控制
下面来演示如何实现基于角色的访问控制。这里将实现 Jerry 用户只能对 mydemo
命名空间拥有读取 Pod 的权限。
创建 mydemo
命名空间,并在该命名空间中创建 Pod。
kubectl create ns mydemo
kubectl create deployment nginx --image=nginx --replicas=3 -n mydemo
查看 mydemo
命名空间中的 Pod 信息。
kubectl get pods -n mydemo
输出的信息如下:
生成 只有读取 Pod 权限的角色 的描述信息。
kubectl create role mydemo-pod-reader-role --verb=get,list,watch --resource=pods --dry-run -o yaml
在生成的描述信息中增加 namespace: mydemo
字段,并将描述信息保存为 mydemo-pod-reader-role.yaml
文件。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:creationTimestamp: nullname: mydemo-pod-reader-rolenamespace: mydemo
rules:
- apiGroups:- ""resources:- podsverbs:- get- list- watch
创建 mydemo-pod-reader-role
角色。
kubectl apply -f mydemo-pod-reader-role.yaml
查看 mydemo
命名空间中的角色信息。
kubectl get role -n mydemo
输出的信息如下:
编辑 mydemo-pod-reader-rolebinding.yaml
文件进行角色绑定,将主体与角色进行绑定。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: mydemo-pod-reader-rolebindingnamespace: mydemo
subjects:
- kind: User#名字大小写敏感name: JerryapiGroup: rbac.authorization.k8s.io
roleRef:kind: Role #this must be Role or ClusterRole# 名字必须与Role或者ClusterRole的名字一致name: mydemo-pod-reader-role apiGroup: rbac.authorization.k8s.io
🚀 这里的主体是用户名称(即
Jerry
),绑定的角色是mydemo-pod-reader-role
。
执行 kubectl apply -f
命令。
kubectl apply -f mydemo-pod-reader-rolebinding.yaml
查看 mydemo
命名空间中的角色信息与角色绑定信息。
kubectl get role,rolebinding -n mydemo
输出的信息如下:
创建 Jerry
用户和认证证书。
# 生成用户的私钥
openssl genrsa -out Jerry.key 2048# 使用刚生成的私钥创建证书,并在 -subj 中指定用户和组。证书文件格式: 用户名.csr
openssl req -new -key Jerry.key -out Jerry.csr -subj "/CN=Jerry/O=mydemo"# 在 /etc/kubernetes/pki 目录下,找到 Kubernetes 集群的证书 ca.crt 和 ca.key
# 生成最终的证书 Jerry.crt,有效期为 30 天
openssl x509 -req -in Jerry.csr -CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
-out Jerry.crt -days 30
把 Jerry
用户的凭证加入 kubeconfig
。
kubectl config set-credentials Jerry --client-key=Jerry.key --client-certificate=Jerry.crt
查看 config
文件,看是否把密钥的内容写进去了,以便在命令行中切换用户。
tail ~/.kube/config
输出的信息如下:
创建用户上下文对象 Jerry-contex
。
kubectl config set-context Jerry-context --cluster=kubernetes --namespace=mydemo --user=Jerry
切换到 Jerry
用户。
kubectl config use-context Jerry-context
输出的信息如下:
🚀 在 Kubernetes 中进行用户切换的常用命令有:
- 回到管理员:
kubectl config use-context kubernetes-admin@kubernetes
- 获取所有用户的 context 列表:
kubectl config get-contexts
- 获取当前用户的 context 信息:
kubectl config current-context
测试 Jerry
用户能否读取 mydemo
命名空间中的 Pod 信息。
kubectl get pod -n mydemo
如果能够正常读取 mydemo
命名空间中的 Pod 信息,则输出如下信息:
执行以下命令测试 Jerry
用户能否在 mydemo
命名空间中创建 Pod:
kubectl create deployment Jerry-nginx --image=nginx --replicas=3 -n mydemo
这时将出现以下错误信息:
error: failed to create deployment:
deployments.apps is forbidden:
User "Jerry" cannot create resource "deployments" in API group "apps" in the namespace "mydemo"
按照相同的方法创建 Tom
用户和认证证书,并切换到 Tom
用户,测试 Tom
用户能否读取 mydemo
命名空间中的 Pod 信息。
相关文章:

【Kubernetes】K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)
K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权) 1.Kubernetes 的鉴权管理1.1 审查客户端请求的属性1.2 确定请求的操作 2.基于角色的访问控制(RBAC 鉴权)2.1 基于角色的访问控制中的概念2.1…...
保研 比赛 利器: 用AI比赛助手降维打击数学建模
数学建模作为一个热门但又具有挑战性的赛道,在保研、学分加分、简历增色等方面具有独特优势。近年来,随着AI技术的发展,特别是像GPT-4模型的应用,数学建模的比赛变得不再那么“艰深”。通过利用AI比赛助手,不仅可以大大…...

秋招校招,在线性格测评应该如何应对
秋招校招,如果遇到在线测评,如何应对? 这里写个总结稿,希望对大家有些帮助。在线测评是企业深入了解求职人的渠道,如果是性格测试,会要求测试者能够快速答出,以便于反应实际情况(时间…...

chrome 插件开发入门
1. 介绍 Chrome 插件可用于在谷歌浏览器上控制当前页面的一些操作,可自主控制网页,提升效率。 平常我们可在谷歌应用商店中下载谷歌插件来增强浏览器功能,作为开发者,我们也可以自己开发一个浏览器插件来配合我们的日常学习工作…...

揭开面纱--机器学习
一、人工智能三大概念 1.1 AI、ML、DL 1.1.1 什么是人工智能? AI:Artificial Intelligence 人工智能 AI is the field that studies the synthesis and analysis of computational agents that act intelligently AI is to use computers to analog and instead…...
Python中的私有属性与方法:解锁面向对象编程的秘密
在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框架内,私有属性与方法则是实现封装的关键机制之一。它们不仅有助…...

开篇_____何谓安卓机型“工程固件” 与其他固件的区别 作用
此系列博文将分析安卓系列机型与一些车机 wifi板子等工程固件的一些常识。从早期安卓1.0起始到目前的安卓15,一些厂家发布新机型的常规流程都是从工程机到量产的过程。在其中就需要调试各种参数以便后续的量产参数可以固定到最佳,工程固件由此诞生。 后…...

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed
DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is not allowed详细…...

三个月涨粉两万,只因为知道了这个AI神器
大家好,我是凡人,最近midjourney的账号到期了,正准备充值时,被一个国内AI图片的生成神器给震惊了,不说废话,先上图看看生成效果。 怎么样还不错吧,是我非常喜欢的国风画,哈哈&#x…...

vulhub GhostScript 沙箱绕过(CVE-2018-16509)
1.搭建环境 2.进入网站 3.下载包含payload的png文件 vulhub/ghostscript/CVE-2018-16509/poc.png at master vulhub/vulhub GitHub 4.上传poc.png图片 5.查看创建的文件...
李宏毅机器学习笔记——反向传播算法
反向传播算法 反向传播(Backpropagation)是一种用于训练人工神经网络的算法,它通过计算损失函数相对于网络中每个参数的梯度来更新这些参数,从而最小化损失函数。反向传播是深度学习中最重要的算法之一,通常与梯度下降…...

内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度
热招岗位 更多岗位欢迎扫描末尾二维码,小程序直接提交简历等面试。实时帮你查询面试进程。 安全运营中心研发工程师 岗位要求 1、本科及以上学历,3年以上的安全相关工作经验; 2、熟悉c/c、go编程语言之一、熟悉linux网络编程和系统编程 3、…...

编写Dockerfile第二版
目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 总结 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除多余文…...
校验码:奇偶校验,CRC循环冗余校验,海明校验码
文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上…...
增维思考,减维问题,避免焦虑!
什么是嵌入式软件开发的核心技能? 1. 编程语言 熟练掌握C/C:C语言是嵌入式领域最重要也是最主要的编程语言,用于实现系统功能和性能优化。C在需要面向对象编程的场合也是重要的选择。了解汇编语言:在某些需要直接与硬件交互或优…...
自动化抢票 12306
自动化抢票 12306 1. 明确需求 明确采集的网站以及数据内容 网址: https://kyfw.12306.cn/otn/leftTicket/init数据: 车次相关信息 2. 抓包分析 通过浏览器开发者工具分析对应的数据位置 打开开发者工具 F12 或鼠标右键点击检查 刷新网页 点击下一页/下滑网页页面/点击搜…...

海外云服务器安装 MariaDB10.6.X (Ubuntu 18.04 记录篇二)
本文首发于 秋码记录 MariaDB 的由来(历史) 谈起新秀MariaDB,或许很多人都会感到陌生吧,但若聊起享誉开源界、业界知名的关系型数据库——Mysql,想必混迹于互联网的人们(coder)无不知晓。 其…...
Mybatis_基础
文章目录 第一章 Mybatis简介1.1 Mybatis特性1.2 和其它持久化层技术对比 第二章 Mybatis的增删改查第三章 Mybatis的增删改查 第一章 Mybatis简介 1.1 Mybatis特性 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和…...
8Manage采购申请管理:轻松实现手动采购流程自动化
您是否感受到通过手动采购申请流程管理成本的压力? 信息的不充分常常导致现金流的不透明,这已成为财务高管们的常见痛点。本文将展示采购申请管理软件如何帮助您减轻负担,使您能够简化流程。 没有采购申请软件会面临哪些挑战? …...

PADS Router 入门基础教程(一)
有将近三周没有更新过博客了,最近在整理PADS Router 入门基础教程,希望喜欢本系列教程的小伙伴可以点点关注和订阅!下面我们开始进入PADS Router课程的介绍。 一、PADS Router 快捷键 二、课程介绍 本教程主要介绍:PADS Rou…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...