K8s中Service Account和RBAC

一.Service Account详解

1.什么是Service Account?

①.ServiceAccount(服务账户)是Kubernetes集群中的一种资源对象,用于为Pod或其他资源提供身份验证和授权,以便它们能够与Kubernetes API进行交互。

②.ServiceAccount是Kubernetes中用于管理Pod身份验证和授权的重要资源,它使得Pod能够在集群中具有独立的身份,从而实现更精细的权限控制和安全策略。

③. Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。----专门为pod里面的进程和apiserver通信提供认证的。

2.Service account与User account区别:

1. User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API或其他外部服务而设计的

2. User account是跨namespace的,而service account则是仅局限它所在的namespace;

3. 每个namespace都会自动创建一个default service account    

4. Token controller检测service account的创建,并为它们创建secret

3.Service Account 实列

角色和sa需要rolebinding进行绑定,然后sa和pod进行绑定从而达到对资源限制的目的。

创建Service Account

创建sa是也会自动创建一个secret

# vim mysa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: mysanamespace: default#应用
# kubectl apply -f mysa.yaml

查看mysa和自动创建的secret

#查看sa
[root@kube-master kubernetes]# kubectl  get sa mysa
NAME   SECRETS   AGE
mysa   1         22h#查看secret
[root@kube-master kubernetes]# kubectl  get secret
NAME                  TYPE                                  DATA   AGE
default-token-j48pd   kubernetes.io/service-account-token   3      4d20h
mysa-token-zw9b9      kubernetes.io/service-account-token   3      22h

创建角色和绑定

[root@kube-master kubernetes]# vim role.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: mysa-role
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: mysa-bindingnamespace: default
subjects:                 #定义对那个主体进行操作,
- kind: ServiceAccountname: mysanamespace: default
roleRef:                    #定义使用哪个角色kind: Rolename: mysa-roleapiGroup: rbac.authorization.k8s.io#####导入
kubectl apply -f role.yaml

使用mysa的sa资源配置pod

[root@kube-master kubernetes]# vim mysa-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: mysa-pod
spec:serviceAccountName: mysa   # 给pod指定Service Accountcontainers:- name: appimage: 10.36.192.206:8088/newrain857/kubectlcommand: ["tail","-f","/dev/null"]###导入
kubectl apply -f mysa-pod.yaml

查看

kubectl  get pod mysa-pod -o  yaml

进入容器测试(可以看到,我们已经成功限制了pod对资源的访问)

[root@kube-master kubernetes]# kubectl  exec -it mysa-pod -c app  /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # 
/ # 
/ # kubectl get pod
NAME            READY   STATUS    RESTARTS        AGE
mysa-pod        1/1     Running   1 (6h20m ago)   22h
mysql           1/1     Running   1 (6h20m ago)   19h
nginx           1/1     Running   1 (6h21m ago)   17h
test-downward   1/1     Running   0               5h39m##没有给delete权限就无法操作
/ # kubectl delete nginx
error: the server doesn't have a resource type "nginx"

二.RBAC(基于角色的访问控制)

角色绑定用户达到对用户限制的目的

k8s里面有两种用户,一种是User,一种就是service account(服务使用的账号)。
User account是为人设计的属于用户账户(个人使用的账号),此外User Account是跨Namespace的,而ServiceAccount则是仅局限它所在的Namespace。


在RABC API中,通过如下的步骤进行授权:
1)定义角色:在定义角色时会指定此角色对于资源的访问控制的规则;
2)绑定角色:将主体与角色进行绑定,对用户进行访问授权。

角色

  • Role:授权特定命名空间的访问权限
  • ClusterRole:授权所有命名空间的访问权限

角色绑定

  • RoleBinding:将角色绑定到主体(即subject)
  • ClusterRoleBinding:将集群角色绑定到主体

在K8s中这些资源分属于两个级别,名称空间(role/rolebinding)和集群级别(clusterrole/clusterrolebinding)这两个都是标准的K8s资源,可以直接定义。

rolebinding:将哪个用户绑定到哪个role上
clusterrolebinding:绑定到集群角色上
   如果使用clusterrolebinding绑定到clusterrole上,表示绑定的用户拥有所有namespace的权限


 Role 和 ClusterRole

Role普通角色:一个Role对象只能用于授予对某一单一命名空间中资源的访问权限,普通角色只是在当前的名称空间生效。简而言之,一个 Role 只可以用来对某一命名空间中的资源赋予访问权限。
 ClusterRole集群角色:整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现,可以访问整个集群资源。

1.创建用户

对于User账户,我们可以通过创建k8s集群时自带的证书对我们(admin)权限(几乎)手动管理master中的凭证文件,并且将每个凭证文件和一个字符串对应起来,只要用户请求中有信息(一般来自本地保存的.kube/config文件中)能够证明自己有任意一个凭证文件的授权,那么这个请求就被认为是一个合法用户发出的,同时,在证书中还可以加入用户所在的组(group)的信息,k8s可以据此认为user在一个组中或者后期通过rolebinding等赋予操作权限。

#创建私钥,生成一个 2048 位的 aren.key 文件
[root@kube-master rbac]# umask 077; openssl genrsa -out aren.key 2048
#用此私钥创建一个csr(证书签名请求)文件
[root@kube-master rbac]# openssl  req -new -key aren.key -out aren.csr -subj  "/CN=aren" #这个地方是用户名
#拿着私钥和请求文件生成证书
[root@kube-master rbac]# openssl x509 -req -in aren.csr -CA  /etc/kubernetes/pki/ca.crt  -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out aren.crt -days 365
Signature ok
subject=/CN=aren
Getting CA Private Key
#生成账号
[root@kube-master rbac]# kubectl config set-credentials aren --client-certificate=aren.crt --client-key=aren.key --embed-certs=true
User "aren" set.
#指的是创建这个账号的环境在当前名称空间中
[root@kube-master rbac]# kubectl config set-context aren@kubernetes --cluster=kubernetes --user=aren
Context "aren@kubernetes" modified.
#、切换用户
[root@kube-master rbac]# kubectl config use-context aren@kubernetes
Switched to context "aren@kubernetes".
#查看
[root@kube-master rbac]#  kubectl config current-context
aren@kubernetes

2.role和rolebinding

先切回管理账号

[root@kube-master rbac]# kubectl  config   use-context  kubernetes-admin@kubernetes
2.1创建一个角色(role)---设置权限

--verb: 相当于是权限
--resource:给什么资源使用

[root@kube-master rbac]# kubectl  create role role-reader  --verb=get,list,watch --resource=pod,svc
role.rbac.authorization.k8s.io/role-reader created###########或者#############yaml文件方式
[root@kube-master rbac]# vim role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: role-reader
rules: #定义规则- apiGroups: [""]  #表示当前pod使用核心的APIserver组,默认用""表示就可以resources: ["pods","svc"]verbs: ["get", "list", "watch", "create", "update", "delete"] #["*"]表示所有权限#启动
# kubectl apply -f role.yaml

查看role

[root@kube-master rbac]# kubectl  get role
NAME          CREATED AT
role-reader   2023-12-16T08:54:10Z
2.2让用户aren,和role-reader角色绑定

arenrole-binding:绑定名

--role=arenrole-binding  指定角色

--user=aren  指定用户

[root@kube-master rbac]#  kubectl  create  rolebinding arenrole-binding  --role=role-reader  --user=aren
rolebinding.rbac.authorization.k8s.io/arenrole-binding created##############或者##################
#yaml格式
[root@kube-master rbac]# vim role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: arenrole-binding
subjects:    #定义对那个主体进行操作,有三种Subjects:Service Account、User Account、Groups
- kind: Username: arenapiGroup: rbac.authorization.k8s.io
roleRef:  #定义使用哪个角色kind: Rolename: role-readerapiGroup: rbac.authorization.k8s.io#加载启动
# kubectl apply -f role-binding.yaml 

查看绑定

[root@kube-master rbac]# kubectl  get rolebinding
NAME               ROLE               AGE
arenrole-binding   Role/role-reader   4m1s
测试

切换用户无法使用授权以外的权限。

#切换用户
[root@kube-master rbac]# kubectl  config  use-context aren@kubernetes
Switched to context "aren@kubernetes".#查看权限(只授权了default名称空间pod和svc的get,list,watch权限)
[root@kube-master rbac]# kubectl  get pod
NAME            READY   STATUS    RESTARTS     AGE
mysa-pod        1/1     Running   1 (8h ago)   24h
mysql           1/1     Running   1 (8h ago)   20h
nginx           1/1     Running   1 (8h ago)   19h
test-downward   1/1     Running   0            7h19m#无权限删除
[root@kube-master rbac]# kubectl  delete nginx
Error from server (Forbidden): pods "nginx" is forbidden: User "aren" cannot delete resource "pods" in API group "" in the namespace "default"

3.clusterrole和clusterrolebinding

删除aren账号之前绑定的rolebinding

[root@kube-master rbac]#  kubectl  delete rolebinding  arenrole-binding
rolebinding.rbac.authorization.k8s.io "arenrole-binding" deleted
3.1创建clusterrole #可以访问全部的namespace
[root@kube-master rbac]# kubectl create clusterrole myclusterrole --verb=get,list,watch --resource=pod,svc
clusterrole.rbac.authorization.k8s.io/myclusterrole created##########或者#############
#yaml格式
[root@kube-master rbac]# vim clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: myclusterrole
rules:
- apiGroups:- ""resources:- podsverbs:- get- list- watch#启动
kubectl apply -f clusterrole.yaml
#查看clusterrole
[root@kube-master rbac]# kubectl get clusterrole myclusterrole
NAME            CREATED AT
myclusterrole   2023-12-16T09:16:31Z
3.2绑定集群角色到aren上

clusterrolebinding  集群角色绑定名

-clusterrole=myclusterrole  指定集群角色

--user=aren   指定用户

[root@kube-master rbac]# kubectl  create clusterrolebinding arencluster-rolebinding   --clusterrole=myclusterrole --user=aren##########或者############
yaml格式
[root@kub-k8s-master ~]# vim clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: arencluster-rolebinding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: myclusterrole
subjects:
- apiGroup: rbac.authorization.k8s.iokind: Username: aren#启动
kubectl  apply -f clusterrolebinding.yaml#查看绑定
[root@kube-master rbac]# kubectl get clusterrolebinding arencluster-rolebinding
NAME                      ROLE                        AGE
arencluster-rolebinding   ClusterRole/myclusterrole   56s
测试

切换用户查看kube-system命名空间的pod(查看成功)

#切换账号
[root@kube-master rbac]# kubectl  config use-context aren@kubernetes
Switched to context "aren@kubernetes".#查看权限 查看kube-system空间的pod
[root@kube-master rbac]# kubectl  get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS        AGE
calico-kube-controllers-7c87c5f9b8-467xf   1/1     Running   20 (8h ago)     4d20h
calico-node-ql7kv                          1/1     Running   8 (8h ago)      4d22h
calico-node-rmnbh                          1/1     Running   10 (8h ago)     4d22h
calico-node-z22v9                          1/1     Running   15 (150m ago)   4d22h
coredns-78fcd69978-54v6q                   1/1     Running   8 (8h ago)      4d22h
coredns-78fcd69978-gt2rx                   1/1     Running   8 (8h ago)      4d22h
etcd-kube-master                           1/1     Running   10 (8h ago)     4d22h
kube-apiserver-kube-master                 1/1     Running   11 (8h ago)     4d22h
kube-controller-manager-kube-master        1/1     Running   21 (151m ago)   4d22h
kube-proxy-j97dk                           1/1     Running   8 (8h ago)      4d22h
kube-proxy-mmppf                           1/1     Running   11 (8h ago)     4d22h
kube-proxy-r8288                           1/1     Running   8 (8h ago)      4d22h
kube-scheduler-kube-master                 1/1     Running   15 (149m ago)   3d20h

设置上下文和账户切换

设置工作上下文

 kubectl config set-context aren@kubernetes --cluster=kubernetes --user=aren

查看工作上下文

kubectl  config  view

切换用户

 kubectl  config use-context  用户名@kubernetes

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

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

相关文章

改进lora-scripts,支持SDXL训练,以及启动脚本

分享下自己改进的一个lora训练脚本,在ubuntu下如果SD-WEBUI的环境已经搭好的话,只需要下载lora-script就可以支持训练了,直接命令行方式训练。 首先,我们需要克隆下项目: git clone https://github.com/Akegarasu/lo…

黑色翻页时钟HTML源码-倒计时单页翻页时钟

黑色翻页时钟HTML源码-倒计时单页翻页时钟这是一个类似fliqlo的黑色翻页时钟HTML源码,它仅包含一个HTML文件,上传到网站后即可使用。该时钟具有查看当前时间、秒表和倒计时功能,并且可以在页面的右下角进行设置。 红色动态炫酷数字时钟html网…

八股文打卡day1——计算机网络(1)

面试题:从输入 URL 到页面展示到底发生了什么? 我的回答: 1.首先在浏览器缓存中寻找该页面资源。如果找到了,就返回页面资源。如果没找到,就进行网络请求。 2.在进行网络请求前,先进行DNS的解析&#xff…

【已解决】在使用poi-tl生成的word文档时候,怎么添加目录?poi-tl生成目录解决办法

需求: 需求的报告模板中大概包括标题、目录、前言、章节(根据模板动态生成的标题文字表格图片),其中目录需要根据章节的实际情况动态生成。在网上没有找到什么好的解决方案,请教一下实现思路,非常感谢。 …

PHP的垃圾回收机制是怎样的?

PHP 使用自动垃圾回收机制来管理内存。PHP 的垃圾回收主要依赖于引用计数和周期性垃圾回收两种策略。 引用计数: PHP 使用引用计数来跟踪变量的引用次数。每当一个变量被引用,其引用计数就增加;每当一个引用被释放,计数就减少。当…

工作中 docker 的使用积累

2 进入 openwrt 容器 docker exec -it openwrt /bin/sh3 查看 docker 信息 docker info4 启动容器 4 挂载 overlay mount -t overlay overlay -o lowerdirA:B,upperdirC,workdirworker /tmp/test -t overlay : 指定要挂载的文件系统类型为 overlayoverlay: 指定…

MATLAB 计算两片点云间的最小距离(2种方法) (39)

MATLAB 计算两片点云间的最小距离 (39) 一、算法介绍二、算法实现1.常规计算方法2.基于KD树的快速计算一、算法介绍 假设我们现在有两片点云 1 和 2 ,需要计算二者之间的最小距离,这里提供两种计算方法,分别是常规计算和基于KD树近邻搜索的快速计算方法,使用的测试数据如…

springboot 解析微信小程序获取手机号

引用依赖包 <dependency><groupId>bouncycastle</groupId><artifactId>bcprov-jdk14</artifactId><version>138</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fast…

I2C 从设备

驱动文件 \drivers\i2c\busses\i2c-designware-slave.c I2C控制器 \drivers\i2c\i2c-slave-eeprom.c I2C设备示例 由于作为从&#xff0c;接收主写过来的数据时总是少一个&#xff0c;因为分析相关。 控制器驱动中断 加打印&#xff0c;很多时候不能打印出来。如下中断中…

为什么选择国产WordPress:HelpLook的优势解析

如今网站建设可以说已经是企业必备。而在众多的网站建设工具中&#xff0c;WordPress无疑是其中的佼佼者。作为一款开源的CMS&#xff08;内容管理系统&#xff09;&#xff0c;WordPress拥有丰富的插件和主题&#xff0c;以及强大的功能&#xff0c;使得用户可以轻松地构建出符…

vivado约束方法8

无交互的逻辑互斥时钟组 逻辑排他性时钟是指在不同源点上定义但共享部分的时钟由于多路复用器或其他组合逻辑&#xff0c;它们的时钟树。时间限制向导识别此类时钟&#xff0c;并建议在它们这样做时直接对其进行时钟组约束除了连接到其共享时钟的逻辑之外&#xff0c;彼此之间…

半导体:Gem/Secs基本协议库的开发(5)

此篇是1-4 《半导体》的会和处啦&#xff0c;我们有了协议库&#xff0c;也有了通讯库&#xff0c;这不得快乐的玩一把~ 一、先创建一个从站&#xff0c;也就是我们的Equipment端 QT - guiCONFIG c11 console CONFIG - app_bundle CONFIG no_debug_release # 不会生…

Python 直观理解基尼系数

基尼系数最开始就是衡量人群财富收入是否均衡&#xff0c;大家收入平平&#xff0c;那就是很平均&#xff0c;如果大家收入不平等&#xff0c;那基尼系数就很高。 还是给老干部们讲的言简意赅。 什么是基尼系数 我们接下来直接直观地看吧&#xff0c;程序说话 # -*- coding:…

Chart.js 实现实时动态折线图 并限制最大长度

<!DOCTYPE html> <html><head><title>模拟</title><script src"https://lib.sinaapp.com/js/jquery/3.1.0/jquery-3.1.0.min.js"></script><script src"https://cdn.staticfile.org/Chart.js/3.9.1/chart.js"…

小程序图片显示不出来 怎么解决?

一、如果不是本地路径的图片 可以改成本地路径 二、使用图床 使用图床的基本步骤如下&#xff1a; 选择图床服务&#xff1a;根据自己的需求选择一家可靠的图床服务提供商&#xff0c;例如七牛云、腾讯云COS、阿里云OSS等。 注册账号&#xff1a;前往选定的图床服务提供商的…

12345、ABCDE项目符号列表文字视频怎么制作?重点内容介绍PR标题模板项目工程文件

Premiere模板&#xff0c;包含10个要点标题12345、ABCDE项目符号列表文字模板PR项目工程文件。可以根据自己的需要定制颜色。在视频的开头、中间和结尾使用。包括视频教程。 适用软件&#xff1a;Premiere Pro 2019 | 分辨率&#xff1a;19201080 (HD) | 文件大小&#xff1a;9…

基于Java SSM框架实现疫情居家办公OA系统项目【项目源码+论文说明】

基于java的SSM框架实现疫情居家办公OA系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识…

Python基础03-循环结构

零、文章目录 Python基础03-循环结构 1、循环简介 &#xff08;1&#xff09;循环是什么 程序是为了解决实际问题的&#xff0c;实际问题中存在着重复动作&#xff0c;那么程序中也应该有相应的描述&#xff0c;这就是循环。 &#xff08;2&#xff09;循环的作用 让代码…

加油站“变身”快充站,探讨充电新模式——安科瑞 顾烊宇

摘要&#xff1a;新能源汽车规模化发展的同时&#xff0c;充电不便利的痛点愈发明显。在未来的新能源汽车行业发展当中&#xff0c;充电的矛盾要远远大于造车的矛盾&#xff0c;解决好充电的问题成为电动汽车行业发展的一个突出问题。解决充电补能问题&#xff0c;重要的方式之…

LangChain(0.0.340)官方文档十:Retrieval——Retrievers(检索器)

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe 文章目录 一、Vector store-backed retriever1.1 基础示例1.1.1 从文本创建Vector store1.1.2 从documents创建Vector store1.1.3 MMR搜索1.1.4 设置相似性分数阈值1.1.5 指定 top k 1.…