当前位置: 首页 > news >正文

【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 资源的操作,如 createlistget 等请求动词。
  • 请求路径和动作:指示各种非 Kubernetes 资源的路径(如 /api),以及对该路径执行的 HTTP 操作(如 GET、POST、PUT 等)。
  • 命名空间:正在访问的 Kubernetes 对象的命名空间。

1.2 确定请求的操作

确定请求的操作 是指,确定对 Kubernetes 资源对象的请求动词或 HTTP 操作,以及该动词或 HTTP 操作是针对单个资源还是一组资源。

下表列举常见的请求动词与 HTTP 操作,以及它们的对应关系。

请求动词HTTP 操作
createPOST
getlistGET、HEAD
updatePUT
patchPATCH
deletedeletecollectionDELETE

根据 Kubernetes 鉴权时使用的模块,可以将 Kubernetes 的鉴权分为以下 4 4 4 种方式:

  • 基于 角色 的访问控制(RBAC 鉴权)
  • 基于 属性 的访问控制(ABAC 鉴权)
  • 基于 节点 的访问控制(Node 鉴权)
  • 基于 Webhook 的访问控制

基于角色的访问控制(RBAC 鉴权)是最重要的鉴权方式。

2.基于角色的访问控制(RBAC 鉴权)

基于角色的访问控制Role-Based Access ControlRBAC),通过为用户赋予不同的角色来控制其访问 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,所以角色绑定分为 RoleBindingClusterRoleBinding

2.1.3 主体

使用角色的用户被叫作 主体Subject)。它可以是一个用户(User)、一个用户组(Group),也可以是一个服务账号(ServiceAccount)。

角色与角色绑定存在 3 3 3 种关系:RoleBind-RoleClusterRoleBind-ClusterRoleRoleBind-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…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...