【Kubernetes运维篇】RBAC认证授权详解(一)

news2024/9/23 15:30:40

文章目录

    • 一、RBAC授权认证理论知识
      • 1、什么是RBAC授权?
      • 2、认证基本流程
      • 3、K8S客户端访问apiserver的认证几方式
        • 1、第一种:客户端认证
        • 2、第二种:Bearertoken方式
        • 3、第三种:Serviceaccount方式
      • 4、RBAC授权常见角色绑定方式
        • 1、第一种:用户基于RoleBinding绑定到Role上
        • 2、第二种:用户基于RoleBinding绑定到ClusterRole上
        • 3、第三种:用户基于ClusterRoleBinding绑定到ClusterRole上
      • 5、准入控制插件基本介绍
    • 二、Useraccount、Serviceaccount基本使用
      • 1、Useraccount、Serviceaccount介绍
      • 2、案例:创建ServiceAccount绑定到Pod

一、RBAC授权认证理论知识

1、什么是RBAC授权?

RBAC是一种基于角色访问控制方式,它将权限和角色相关联,用户加入到角色中,就会拥有角色中的权限,RBAC的核心思想是,将权限赋予给角色,角色中加入多个用户,加入进来的用户会具有角色的权限,如果修改权限也是针对角色进行操作,而不是针对每个用户进行权限操作,这样效率太低了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TlqP0Gib-1688821901104)(D:\MD归档文档\IMG\image-20230708140424981.png)]

2、认证基本流程

第一步:认证,针对用户做认证,判断用户是否符合要求

K8S中主要通过APIservice对外提供服务,那么就需要针对apiserver做用户认证,如果任何用户都可以访问apiserver,那么就可以随意在K8S集群中创建、删除等操作,这就很危险了,也容易遭到黑客的攻击,所以我们需要针对apiserver做用户授权认证,确保是合法符合要求的用户。

第二步:授权,认证通过,针对用户做权限控制,赋予那些权限

认证通过后仅仅表示此用户是被apiserver进行的用户,可以访问apiserver,但是不一定拥有删除资源,创建资源的权限,需要进行授权操作,常见的授权方式有rbac授权。

第三步:准入控制

用户认证授权通过后,最后一步就是准入控制,K8S提供多种准入控制,有点类似于插件,为apiserver提供更好的 “可拓展性”。请求apiserver时,通过认证,鉴权后、持久化(api对象,保存到etcd前),会经过"准入控制",它可以做变更和验证。

比如:如果我们创建Pod时定义了资源上下限制,但不满足LimitRange规则中定义的资源上下限制,此时LimitRange就会拒绝我们的请求,假如我们定义了一个名称空间叫test,这个名称空间做下资源限制:限制最多可以使用10vCPU、10Gi内存,在这个名称空间下创建的所有Pod都不能超过这个限制。

3、K8S客户端访问apiserver的认证几方式

1、第一种:客户端认证

客户端认证也称双向TLS认证,kubectl在访问apiserver的时候,apiserver要经过CA认证kubectl用户是否合法的,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xC4JTbOM-1688821901105)(D:\MD归档文档\IMG\image-20230708142343329.png)]

2、第二种:Bearertoken方式

Bearetoken方式,可以理解为apiserver将一个密码通过非对称加密方式告诉你了kubectl,然后通过该密码进行相互访问,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYP5qBfu-1688821901105)(D:\MD归档文档\IMG\image-20230708143159856.png)]

3、第三种:Serviceaccount方式

上面客户端认证、Bearertoken都是外部访问apiserver的时候使用的方式,而Serviceaccount这种方式是内部访问Pod和apiserver交互采用的一种方式。

Serviceaccount包括了Namespace、Token、CA、且通过目录挂载的方式给予Pod,当Pod运行起来的时候,会读取到这些信息,从而使用该方式和apiserver进行通信,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gkxi86Yr-1688821901106)(D:\MD归档文档\IMG\image-20230708145529807.png)]

当我们使用kubectl操作K8S资源时,需要确定我们使用那个用户进行1访问那个K8S集群,kubectl操作默认读取 /root/.kube/config文件,也可以使用 kubectl config view 命令进行差看config文件内容。

如果config文件没有在/root/.kube/config ,可以使用 --kubeconfig 参数进行指定文件位置:

kubectl get nodes --kubeconfig=/root/.kube/config 

config文件内容如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoF004cJ-1688821901106)(D:\MD归档文档\IMG\image-20230708150439607.png)]

4、RBAC授权常见角色绑定方式

1、第一种:用户基于RoleBinding绑定到Role上

特点:RoleBinding是具有名称空间限制的,这种方式只限定在Rolebinding的名称空间下,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5pkoiEv-1688821901106)(D:\MD归档文档\IMG\image-20230708154810778.png)]

2、第二种:用户基于RoleBinding绑定到ClusterRole上

特点:没有名称空间限制,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdctqcBj-1688821901106)(D:\MD归档文档\IMG\image-20230708161039073.png)]

3、第三种:用户基于ClusterRoleBinding绑定到ClusterRole上

特点:对任何名称空间下用户都具有ClusteRrole所具有的权限,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5krmoNwU-1688821901107)(D:\MD归档文档\IMG\image-20230708163647549.png)]

5、准入控制插件基本介绍

官方中文参考文档

在K8S中准入控制器的模块有很多,其中比较常用的有LimitRanger、ResourceQuota、ServiceAccount,也是K8S默认启用的准入模块(具体看K8S版本),我们只需要定义对应的规则即可。

如果是使用kubeadm方式搭建的K8S集群,我们可以修改 /etc/kubernetes/manifests/kube-apiserver.yaml文件中--enable-admission-plugins 参数定义使用的准入插件,多个使用逗号隔开,改完重启kubelet即可生效。

二、Useraccount、Serviceaccount基本使用

1、Useraccount、Serviceaccount介绍

Useraccount:用户账户,是给K8S集群外部用户使用的,如kubectl访问K8S集群要用useraccount用户,kubeadm搭建的K8s集群默认useraccount用户是kubernetes-admin

apiserver需要对客户端做认证,使用kubeadm安装的K8s,会在用户家目录下创建一个认证配置文件 .kube/config 这里面保存了客户端访问API Server的密钥相关信息,这样当用kubectl访问k8s时,它就会自动读取该配置文件,向API Server发起认证,然后完成操作请求。

Serviceaccount:服务账户,是给Pod使用的账户,就是在Pod容器内可以访问到apiserver,serviceaccount仅局限它所在的名称空间,每个名称空间创建是都会自动创建一个默认的serviceaccount,在创建Pod时,指定了此名称空间,且没有指定serviceaccount,那么这个Pod会使用此名称空间下默认的serviceaccount。

如下图,是在创建Pod时没有指定serviceaccount,会使用名称空间下默认的serviceaccount。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwG30Ata-1688821901107)(D:\MD归档文档\IMG\image-20230708185529226.png)]

2、案例:创建ServiceAccount绑定到Pod

第一步:创建名为sa-test的ServiceAccount

 kubectl create sa sa-test

第二步:创建Pod指定ServiceAccount

cat sa-test.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: sa-test
  namespace: default
spec:
  serviceAccountName: sa-test  # 指定sa
  containers:
  - name: sa-nginx
    image: nginx
    imagePullPolicy: IfNotPresent
kubectl apply -f sa-test.yaml

第三步:进入容器测试是否可以调用apiserver接口

kubectl exec -it sa-test  -- /bin/bash

指定sa后证书存放在/var/run/secrets/kubernetes.io/serviceaccount/目录

cd /var/run/secrets/kubernetes.io/serviceaccount/
ls
ca.crt	namespace  token

我们指定证书调用apiserver接口

curl --cacert ./ca.crt -H "Authorization: Bearer $(cat ./token)" https://kubernetesapi/v1/namespaces/kube-system

返回信息如下:就是被拒绝访问了,原因是我们只创建了sa用户,没进行授权

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLp0iOca-1688821901107)(D:\MD归档文档\IMG\image-20230708210117488.png)]

第四步:对sa做授权,然后在进行访问

创建一个 ClusterRoleBinding(集群角色绑定)来授予名为 sa-test 的服务账号在 default 命名空间下拥有 cluster-admin 集群角色的权限。通过这个绑定,sa-test 可以在整个集群中拥有最高权限,包括对集群节点、命名空间、Pod 等资源的管理权限。

kubectl create clusterrolebinding sa-test-admin --clusterrole=cluster-admin  --serviceaccount=default:sa-test

进入容器在请求一下:

kubectl exec -it sa-test  -- /bin/bash
cd /var/run/secrets/kubernetes.io/serviceaccount/

curl --cacert ./ca.crt -H "Authorization: Bearer $(cat ./token)" https://kubernetesapi/v1/namespaces/kube-system

进行授权后就可以访问到apiserver接口了如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcjYaEK5-1688821901107)(D:\MD归档文档\IMG\image-20230708210540439.png)]

由于RBAC授权内容较多,分两次进行讲解,请关下篇文章,感谢支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732433.html

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

相关文章

安装OSAR_Co_X

在找开源的QSAR平台 在WOS里用“open source”、“QSAR”、“platform”为关键字找到一个描述QSAR-Co-X的文献,这是一个基于python开发的QSAR平台(额,,,目前还不是很清楚)。 根据链接找到Github里代码的所…

讲故事vs讲知识,区别太大

讲故事vs讲知识,区别很大 以故事化的方式讲知识,一般受众爱听 讲故事,通常受众爱听 趣讲大白话:但不是所有的故事都爱听 【趣讲信息科技219期】 #非著名IT人安志强的趣味笔记# **************************** 有一小部分故事&#…

CTFshow-pwn入门-栈溢出pwn49(静态链接pwn-mprotect函数的应用)

pwn49 首先我们先将pwn文件下载下来,然后赋上可执行权限,再来查看pwn文件的保护信息。 chomd x pwn checksec pwn file pwn我们可以看到这是一个32位的pwn文件,并且保护信息开启了NX和canary,也就是堆栈不可执行且有canary。最最…

算数运算符

运算符介绍:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符赋值运算符关系运算符逻辑运算符位运算符三元运算符 算术运算符 算术运算符是对数值类型的变量进行运算的。 % 取模,取余 在 % 的本质,a % b…

UE5.1.1 C++从0开始(17.GAS游戏能力系统)

教程的链接:https://www.bilibili.com/video/BV1nU4y1X7iQ 教程内的老师没用GAS的插件,而是自己写了一个。这一篇文章只是开头,还有很多的内容没有往里面写。 新增了一个object类,新增了一个使用这个类的组件。然后把这个组件用…

text-to-3d方面的论文列表分享

以下给出几篇我个人觉得比较有价值的text-to-3d的论文列表,论文的超链接会连接到arxiv上。 DreamfusionFantasia3DTangoLatent-NeRFMagic-3dClip-ForgeClip-MeshDreamfieldAvatarCLIPPoint-EShape-EText2Mesh

P3804 【模板】后缀自动机(SAM)

题目描述 给定一个只包含小写字母的字符串 S。 请你求出 S 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值。 输入格式 一行一个仅包含小写字母的字符串 S。 输出格式 一个整数,为所求答案。 题解:这里就不讲后缀自动机的模板相关…

zigbee学习之DHT11温湿度传感器+zigbee无线通信

开发环境:IAR烧录器串口调试助手CC2530DHT11 两个模块:一个作为协调器,负责接收数据,一个作为终端,负责发送数据 步骤: 1、SampleApp.c里配引脚P0_6(查看硬件上的标识) 2、DTH11.c里配引脚 3、修改PANID和信…

超纯水抛光混床树脂的选择及工艺流程

一、什么是超纯水? 既将水中的导电介质几乎完全去除,又将水中不离解的胶体物质、气体及有机物均去除至很低程度的水。电阻率大于18MΩ*cm,或接近18.3MΩ*cm极限值。 超纯水是科技界为了研制超纯材料(半导体原件材料、纳米精细陶…

服务器搭建oracle,并远程连接教程

下载两个压缩包,然后上传到服务器, 软件安装09:CentOS安装Oracle - 虚拟机 - 5997CK - 欢迎您! (hezhilin.online) 这里有全部步骤,反正过了几天我也会忘记,不赘述了。 直接上拆的坑: 开启服务器端口后…

借书问题-2022年全国青少年信息素养大赛Python国赛第3题

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第5讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计…

9.33UEC++、容器

1.定义: 2.TArray:快,小,高 :同质容器 :创建栈对象,不能创建堆对象 如何构建TArray: 获取方式: 实现方式:定义一个array容器数组,两种遍历方式…

跳跃游戏(力扣)贪心 JAVA

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释:可以先跳 1 步…

【实用工具】(BeyondCompare+CppCheck对某次更新的文件进行静态检查)按文件清单复制文件到指定文件夹的辅助工具【2023.07.07】

摘要 开发一个功能提交了多次代码,现在需要比较最终的提交和某次提交的差异并进行静态代码检查。用到了BeyondCompare和CppCheck软件。但是有个问题,BeyondCompare不能把差异项导出,于是乎花了两个小时写了个辅助工具。 使用说明 第一步&…

校服选购定制小程序开发制作功能介绍

本次为各大校服服装定制生产老板介绍一下校服定制商城小程序系统的功能,为大家做参考。 校服定制小程序主要功能有: 1、每个学校校服定制信息独立,不同的学校打开小程序里面信息可以不同。 2、学校致家长的一封信。 3、学生信息录入和下单信息…

【VUE】项目设置超时6分钟,实际1分钟就超时了

一、背景:VUE项目中,前端接口请求设置6分钟,但实际在浏览器中1分钟就超时了 timeout: 6 * 60 * 1000二、经查:不是前端代码设置的问题,也不是浏览器的问题,而是nginx超时设置默认为60S,导致1分…

hexo个人博客搭建(二)butterfly主题配置

Butterfly主题安装文档(二)之主题配置 一、回顾安装butterfly主题 1、在hexo项目根目录下执行操作clone主题 git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly2、如果沒有 pug 以及 stylus 的渲染器,还需要下载&…

matlab语言的前世今生

matlab语言的算法库是用什么语言实现的? Matlab的算法库是用C和C++语言实现的。 Matlab本身是一个解释型的高级编程语言,但它的核心算法库是使用更底层的C和C++语言编写的。这些库提供了许多数值计算、统计分析、信号处理、图像处理、优化等常用算法函数,并以mex文件的形式集…

投票评选活动小程序v2-搜索功能和最新排序功能实现

投票评选活动小程序-搜索功能和最新排序功能实现 优秀人物评选活动,五四奖章评选、优秀工作者人物评选、劳动最光荣评选。通常需要一个搜索功能,用户通过输入名称或编号搜索对应的作品项目或者人物,进行投票。或者通过最新排序功能查看列表情…

pytorch超详细安装教程,Anaconda、PyTorch和PyCharm整套安装流程

本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。 PyTorch深度学习框架详细安装教程 一、anaconda安装(一)下载(二)安装(三)配置环境变量(四)检查…