【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…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...