linux系统kubernetes的ServiceAccount和RBAC角色访问控制

ServiceAccount和RBAC

  • ServiceAccount
    • 使用场景:
    • Service account与User account区别:
    • Service Account应用示例
    • 创建角色
  • RBAC
    • RBAC简述
    • 创建k8s账号与RBAC授权使用
    • 设置上下文和账户切换
      • 设置工作上下文(前提得有用户)
      • 查看当前的工作上下文
      • 切换上下文(切换用户)
      • 切换为管理员用户
      • 查看某个资源类型是由哪个apiserver版本提供

ServiceAccount

官方文档地址:https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

k8s中提供了良好的多租户认证管理机制,如RBAC、ServiceAccount还有各种Policy等。
Pod里的进程也可以与apiserver联系。 当它们在联系apiserver的时候,它们就会被认证为一个特定的 Service Account。  

使用场景:

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

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

Service Account应用示例

Service Account(服务账号)示例

因为平时系统会使用默认service account,我们不需要自己创建,感觉不到service account的存在,本实验是使用自己手动创建的service account

创建serviceaccountkubectl create serviceaccount mysa查看: kubectl get sa|serviceaccountserviceaccount/mysa created
yaml文件创建
---
apiVersion: v1
kind: ServiceAccount
metadata:name: mysa查看mysa
kubectl describe sa mysa查看mysa自动创建的secretkubectl  get secret使用mysa的sa资源配置pod
cd prome/vim mysa-pod.yaml---
apiVersion: v1
kind: Pod
metadata:name: mysa-podlabels:app: pod
spec:containers:- name: mysa-podimage: qingning800/kubectlcommand:- "tail"- "-f"- "/dev/null"serviceAccountName: mysa   #指定serviceaccount的名称导入:kubectl apply -f  mysa-pod.yaml查看:kubectl describe pod mysa-pod查看使用的token和secret(使用的是mysa的token)kubectl get pod mysa-pod -o jsonpath={".spec.volumes"}

创建角色

vim role.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: mysa-role
rules: #定义规则- apiGroups: [""]  #表示当前pod使用核心的APIserver组,默认用""表示就可以resources: ["pods"]verbs: ["get", "list", "watch"] #["*"]表示所有权   #尝试不用空格看看能不能行
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: mysa-binding
subjects:  #定义对那个主体进行操作,有三种Subjects:Service Account、User Account、Groups
- kind: ServiceAccountname: mysa
roleRef:  #定义使用哪个角色kind: Rolename: mysa-roleapiGroup: rbac.authorization.k8s.io

RBAC

在Kubernetes中,授权有ABAC(基于属性的访问控制)、RBAC(基于角色的访问控制)、Webhook、Node、AlwaysDeny(一直拒绝)和AlwaysAllow(一直允许)这6种模式。RBAC基于角色的访问控制--全拼Role-Based Access Control----做权限控制的,顾名思义就是通过给角色赋予相应的权限,从而使得该角色具有访问相关资源的权限。k8s里面有两种用户,一种是User,一种就是service account(服务使用的账号)。
User account是为人设计的属于用户账户(个人使用的账号),此外User Account是跨Namespace的,而ServiceAccount则是仅局限它所在的Namespace。在RABC API中,通过如下的步骤进行授权:
1)定义角色:在定义角色时会指定此角色对于资源的访问控制的规则;
2)绑定角色:将主体与角色进行绑定,对用户进行访问授权。
在K8s中这些资源分属于两个级别,名称空间(role/rolebinding)和集群级别(clusterrole/clusterrolebinding)这两个都是标准的K8s资源,可以直接定义。Role与ClusterRoleRole普通角色:一个Role对象只能用于授予对某一单一命名空间中资源的访问权限,普通角色只是在当前的名称空间生效。ClusterRole集群角色:整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现,可以访问整个集群资源。简介
role/ClusterRole:1、允许的操作,如get,list,update,create,delete等权限2、允许操作的对象,如pod,svc等资源
rolebinding:将哪个用户绑定到哪个role上
clusterrolebinding:绑定到集群角色上如果使用clusterrolebinding绑定到clusterrole上,表示绑定的用户拥有所有namespace的权限#这里面有哪些重要的东西:role,clusterrole,binding,账号。

RBAC简述

基于角色的访问控制角色
role:特定命名空间的访问权限
ClusterRole:所有命名空间访问权限角色绑定
roleBinding:角色绑定到主体
ClusterRoleBinding:集群角色绑定到主体主体
user:用户
group:用户组
serviceAccount:服务账号
1创建命名空间:kubectl create ns roledemo查询命令空间:kubectl get ns2在新创建的命名空间下创建pod
kubectl run nginx --image=nginx -n roledemo3创建角色
vim rbac-role.yamlkind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: roledemoname: pod-reader
rules :
- apiGroups: [""]resources: ["pods"]verbs:["get","watch","list"]kubectl apply -f rbac-role.yaml
kubectl get role -n roledemo     //查看角色4角色绑定
vim rbac-rolebinding.yamlkind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: read-podsnamespace: roledemo     #名称空间的名字
subiects:
- kind: username: lucyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.iokubectl apply -f rbac-rolebinding.yaml
kubectl get role,rolebinding -n roledemo5使用证书识别身份
vim rabc-user.shcat > mary-csr.json << EOF
{"CN": "mary","hosts": "[]","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing"}]
}
EOFcfssl gencert -ca=ca.pam -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare marykubectl config set-cluster kubernetes \--certificate-authority=ca.pem \--embed-certs=true \--server=https://192.168.188.175:6443 \--kubeconfig=mary-kubeconfigkubectl config set-credentials mary \--client-key=mary-key.pem \--client-certificate=mary.pem \--embed-certs=true \--kubeconfig=mary-kubeconfigkubectl config set-context default \--cluster=kubernetes \--user=mary \--kubeconfig=mary-kubeconfigkubectl config use-context default --kubeconfig=mary-kubeconfig将证书拷贝的目录下,执行脚本
kubectl get pods -n roledemo

创建k8s账号与RBAC授权使用

创建账号
创建私钥
(umask 077; openssl genrsa -out soso.key 2048)用此私钥创建一个csr(证书签名请求)文件
openssl  req -new -key soso.key -out soso.csr -subj  "/CN=soso" # 这个地方是用户名拿着私钥和请求文件生成证书
openssl x509 -req -in soso.csr -CA  /etc/kubernetes/pki/ca.crt  -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out soso.crt -days 365生成账号
kubectl config set-credentials soso --client-certificate=soso.crt --client-key=soso.key --embed-certs=true设置上下文环境--指的是创建这个账号的环境在当前名称空间中
kubectl config set-context soso@kubernetes --cluster=kubernetes --user=soso查看当前的工作上下文
kubectl config view切换用户(切换上下文)
kubectl  config use-context soso@kubernetes验证是否已经切换到了新的上下文
kubectl config current-context测试(还未赋予权限)
kubectl  get pod
创建一个角色(role)---设置权限
切回管理帐号先
kubectl  config use-context kubernetes-admin@kubernetes创建角色(命令):
kubectl  create role  role-reader  --verb=get,list,watch --resource=pod,svcyaml文件方式:
vim role.yamlapiVersion: 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 kubectl get roleskubectl describe role role-reader绑定用户soso(上面创建的用户),绑定用户到role-reader
kubectl  create  rolebinding myrole-binding  --role=role-reader  --user=sosoyaml文件方式:
vim role-binding.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: myrolebind
subjects:  #定义对那个主体进行操作,有三种Subjects:Service Account、User Account、Groups
- kind: Username: sosoapiGroup: rbac.authorization.k8s.io
roleRef:  #定义使用哪个角色kind: Rolename: role-readerapiGroup: rbac.authorization.k8s.iokubectl apply -f role-binding.yaml kubectl get rolebinding 切换用户
kubectl  config use-context soso@kubernetes查看权限(只授权了default名称空间pod和svc的get,list,watch权限)
kubectl  get podkubectl  get pod -n kube-system  #无权访问kube-systemkubectl  delete pod nginx-pod   #无权限删除切换用户
kubectl  config use-context kubernetes-admin@kubernetes实验二,绑定用户到集群角色6.删除soso账号之前绑定的rolebinding
kubectl  delete rolebinding myrolebind7.创建clusterrole #可以访问全部的namespace
kubectl create clusterrole myclusterrole --verb=get,list,watch --resource=pod,svcyaml文件方式:
vim clusterrole.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: myclusterrole
rules:
- apiGroups:- ""resources:- podsverbs:- get- list- watchkubectl apply -f clusterrole.yamlkubectl get clusterrole8.绑定集群角色到用户soso
kubectl  create clusterrolebinding my-cluster-rolebinding   --clusterrole=myclusterrole --user=sosoyaml文件方式:
vim clusterrolebinding.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: my-cluster-rolebinding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: myclusterrole
subjects:
- apiGroup: rbac.authorization.k8s.iokind: Username: sosokubectl apply -f clusterrolebinding.yamlkubectl get clusterrolebinding切换账号
kubectl  config use-context soso@kubernetes查看权限 查看kube-system空间的pod
kubectl  get pod -n kube-system注意:切换为管理员用户
kubectl  config use-context kubernetes-admin@kubernetes

设置上下文和账户切换

设置工作上下文(前提得有用户)

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

查看当前的工作上下文

kubectl config view

切换上下文(切换用户)

kubectl config use-context soso@kubernetes

切换为管理员用户

kubectl  config use-context kubernetes-admin@kubernetes

查看某个资源类型是由哪个apiserver版本提供

kubectl explain ClusterRole

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

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

相关文章

学习笔记Day14:Linux下软件安装

软件安装 Anaconda 所有语言的包(package)、依赖(dependency)和环境(environment)管理器&#xff0c;类似应用商店 Conda < Miniconda < Anaconda&#xff08;有交互界面&#xff09; Linux下Miniconda即可 安装Miniconda 搜索北外/清华miniconda镜像网站&#xff…

echarts图表动态监听dataZoom滑动,控制柱条的宽度以及数值的显示隐藏

当数值过多时&#xff0c;显示所有柱条看着会很凌乱且文字会挤在一起&#xff0c;于是就需要监听datazoom的滑动&#xff0c;拿到对应的阈值后做出相应的配置。 “dataZoom” 事件通常用于响应用户对图表进行数据缩放的操作。 这里是datazoom官网api地址&#xff1a;点击跳转至…

Scala第十一章节(Option类型和偏函数)

2. Option类型 2.1 概述 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是 比较繁琐的. 在Scala中, 我们返回某些数据时&#xff0c;可以返回一个Option类型的对象来封装具体的数据&#xff0c;从而实现有效 的避…

服务器端(Debian 12)配置jupyter与R 语言的融合

融合前&#xff1a; 服务器端Debian 12,域名&#xff1a;www.leyuxy.online 1.安装r-base #apt install r-base 2.进入R并安装IRkernel #R >install.packages(“IRkernel”) 3.通过jupyter notebook的Terminal执行&#xff1a; R >IRkernel::installspec() 报错 解决…

浅谈数据治理之道 序(一)

得数据者得利&#xff0c;加之数据可以入表&#xff0c;对数据重要性不言而喻&#xff0c;那么数据治理的具体诱因有哪些呢&#xff1f;&#xff1f; 1. 数据爆炸式增长&#xff1a;随着数字化时代的到来&#xff0c;大数据的产生和积累呈现爆炸式增长的趋势。组织面临着庞大、…

DFS基础——迷宫

迷宫 配套视频讲解 关于dfs和bfs的区别讲解。 对于上图&#xff0c;假设我们要找从1到5的最短路&#xff0c;那么我们用dfs去找&#xff0c;并且按照编号从大到小的顺序去找&#xff0c;首先找到的路径如下&#xff0c; 从节点1出发&#xff0c;我们发现节点2可以走&#xff…

在Linux上运行JMeter(非界面)

参考&#xff1a; 查看文件类型&#xff1a;https://www.linuxprobe.com/files-tehre-fangfa.html 华为云平台 配置&#xff1a;jdk环境、jmeter环境 jmeter配置&#xff08;在/etc/profile文件中&#xff09;&#xff1a; export JMETER_HOME/path/to/jmeter/installati…

微信小程序网络请求封装API集中管理

common/api目录下创建两个js文件 { apiList.js,api.js } API列表 // common/api/apiList.js const BASE_URL https://api.example.com; // 定义 API 的基础域名const apiList {getData: BASE_URL /data,postData: BASE_URL /postData,// 其他接口路径... };module.expor…

嵌入式学习41-数据结构2

今天学习了链表的增删改查 &#xff08;暂定&#xff01;&#xff01;后续再补内容&#xff09; 高内聚 &#xff1a;一个函数只实现一个功能 …

Docker 镜像仓库

目录 1、搭建私有 registry 服务端创建镜像仓库 客户端推送镜像 镜像导入导出 2、Nginx 代理 registry 仓库 SSL 证书 & https 协议 SSL证书 https协议 SSL 的验证流程 客户端安装 Nginx 使用 openssl 生成CA根证书和根证书key 创建 Nginx 服务证书 配置启动 N…

Airgorah:一款功能强大的WiFi安全审计工具

关于Airgorah Airgorah是一款功能强大的WiFi安全审计工具&#xff0c;该工具可以轻松发现和识别连接到无线接入点的客户端&#xff0c;并对特定的客户端执行身份验证攻击测试&#xff0c;捕捉WPA握手包&#xff0c;并尝试破解接入点的密码。在该工具的帮助下&#xff0c;广大研…

moba客户端开发面经

1、 Lua&#xff1a;元表是什么&#xff0c;怎么实现对象继承 2、OPP是什么 3、mvc结构 4、C#: list和array区别和使用场景 5、项目&#xff1a; &#xff08;1&#xff09;ui框架类设计&#xff0c;ui层级管理怎么做&#xff0c;对象初始化内存占用这样做高&#xff0c;资源是…

什么是TCP粘包/拆包?发生的原因?

一个完整的业务可能会被TCP拆分成多个包进行发送&#xff0c;也有可能把多个小的包封装成一个大的数据包发送&#xff0c;这个就是TCP的拆包和粘包问题。 原因 1、应用程序写入数据的字节大小大于套接字发送缓冲区的大小. 2、进行MSS大小的TCP分段。( MSSTCP报文段长度-TCP首…

Milvus 向量数据库:如何基于docker-compose在本地快速搭建测试环境

文章目录 1. 安装 milvus1.1. milvus v2.3.12版本信息1.2. 安装milvus步骤1.3. 安装管理工具Attu1.4. 将Attu由docker-compose启动参考Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引,详见介绍请参见: milvus: 专为向量查询与检索设计的向量数据库 …

在Ubuntu上使用Script命令捕获命令与其输出

在Ubuntu上使用Script命令捕获命令与其输出 起初&#xff0c;是为了记录软件的安装过程&#xff0c;就在想有没有简单高效的记录方法&#xff0c;之后就找到了script命令。 使用 script命令&#xff0c;可以很容易地记录下你在终端里所有的操作与输出&#xff0c;非常适合用来…

Sql Server小技能:row_number()函数

文章目录 引言I Sql Server: 使用row_number()函数进行编号1.1 获取出每个分组中薪资最高的员工信息1.2 获取最新船舶位置(定位)1.3 获取一个星期内离线信息II 相关表结构2.1 港区2.2 警报2.3 用户表2.4 用户权限III DBCC CHECKIDENT 标识更正see also引言 I Sql Server: …

是时候来唠一唠synchronized关键字了,Java多线程的必问考点!

写在开头 在之前的博文中&#xff0c;我们介绍了volatile关键字&#xff0c;Java中的锁以及锁的分类&#xff0c;今天我们花5分钟时间&#xff0c;一起学习一下另一个关键字&#xff1a;synchronized。 synchronized是什么&#xff1f; 首先synchronized是Java中的一个关键字…

【每日算法】理论:图像分割相关 刷题:设计链表

上期文章 【每日算法】理论&#xff1a;AIGC微调技术 刷题&#xff1a;滑动窗口、循环 文章目录 上期文章一、上期问题二、理论问题1、变形自注意力模块的特别之处2、GroundingDino模型的损失函数是什么&#xff1f;3、Dice Loss4、UNet的网络架构5、VQVAE模型相对于VAE的改进…

Tensorflow 2.0 常见函数用法(一)

文章目录 0. 基础用法1. tf.cast2. tf.keras.layers.Dense3. tf.variable_scope4. tf.squeeze5. tf.math.multiply 0. 基础用法 Tensorflow 的用法不定期更新遇到的一些用法&#xff0c;之前已经包含了基础用法参考这里 &#xff0c;具体包含如下图的方法&#xff1a; 本文介…

dbscan算法实现鸢尾花聚类(python实现)

DBscan算法原理 : dbscan算法-CSDN博客 法一(调库) : 直接调库 : import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA from sklearn.discriminant_analysis …