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

kubernetes 权限控制

RBAC引入了4个顶级资源对象:Role、ClusterRole:角色,用于指定一组权限;RoleBinding、ClusterRoleBinding:角色绑定,用于将角色(权限)赋予给对象

咱们通过Role可以配置命名空间下资源的访问权限,例如,pod,service,deployment等资源是否可以修改,删除等权限;Role只能对命名空间内的资源进行授权,需要指定nameapce

ClusterRole是整个kubernetes下的资源的访问权限的控制,跨namespaces的范围资源、非资源类型进行授权

我当前app整个命名空间下有一些pod,我们以app这个命名空间,创建一个xiaom的用户,这个用户只能app这个命名空间下的Pod,Deployment的资源,其他的资源没权限更改

[root@k8s-master1 RBAC]# kubectl get pods -n app -o wide
NAME                                        READY   STATUS    RESTARTS         AGE    IP               NODE          NOMINATED NODE   READINESS GATES
dsf-67b6bd65c9-44rl4                        2/2     Running   16 (3h15m ago)   25d    10.10.135.218    k8s-master3   <none>           <none>
ingress-nginx-controller-74974c55bd-2bw2r   1/1     Running   6 (20h ago)      2d1h   192.168.21.100   k8s-node1     <none>           <none>
ingress-nginx-controller-74974c55bd-j24mf   1/1     Running   10 (3h15m ago)   31d    192.168.21.122   k8s-master3   <none>           <none>
nginx-55c7d65db4-z4rcc                      1/1     Running   4 (20h ago)      2d1h   10.10.36.96      k8s-node1     <none>           <none>
postgres-sonar-5b9d94cd6b-965tk             1/1     Running   2 (3h15m ago)    2d1h   10.10.135.221    k8s-master3   <none>           <none>
tomcat-657677ffb5-2nrfc                     1/1     Running   8 (3h15m ago)    26d    10.10.135.222    k8s-master3   <none>           <none>

Role的配置示例:

[root@k8s-master1 app]# kubectl apply -f app-Role.yaml
role.rbac.authorization.k8s.io/app-authorization-Role created[root@k8s-master1 app]# cat app-Role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: app                                         #指定命名空间name: app-authorization-Role
rules:- apiGroups: [ "" ]                                    #支持的API组列表,"" 空字符串,表示核心API群resources: [ "pod" ]                   #支持的资源对象列表verbs: [ "get","delete","create","delete","exec" ]   #允许的对资源对象的操作方法列表

apiGroups表示支持的API组列表:“”,“apps”, “autoscaling”, “batch”;
resources: 支持的资源对象列表
“services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,
“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,
“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”
verbs: 对资源对象的操作方法列表
“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”, “exec”

RoleBinding可以将同一namespace中的subject(用户、用户组)绑定到某个Role(规则)下,则此subject即具有该Role定义的权限.

[root@k8s-master1 app]# cat app-RoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: app-authorization-role-bindingnamespace: app
subjects:- kind: Username: xiaomapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: app-authorization-RoleapiGroup: rbac.authorization.k8s.io
[root@k8s-master1 app]# kubectl apply -f app-RoleBinding.yaml

创建一个xiaom的集群用户验证一下

[root@k8s-master1 user]# pwd
/opt/certs/user
(umask 077;openssl genrsa -out xiaom.key 2048)
[root@k8s-master1 user]# openssl req -new -key xiaom.key -out xiaom.csr -subj "/CN=xiaom/O=xiaomgroup"
[root@k8s-master1 user]# openssl x509 -req -in xiaom.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out xiaom.crt -days 3650
[root@k8s-master1 app]# kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/opt/kubernetes/certs/ca.pem --server=https://192.168.21.120:6443
[root@k8s-master1 app]# kubectl config set-credentials xiaom --embed-certs=true --client-certificate=/opt/certs/user/xiaom.crt --client-key=/opt/certs/user/xiaom.key
User "xiaom" set.
[root@k8s-master1 app]# kubectl config set-context xiaom@kubernetes --cluster=kubernetes --user=xiaom
Context "xiaom@kubernetes" modified.
[root@k8s-master1 app]# kubectl config use-context xiaom@kubernetes
Switched to context "xiaom@kubernetes".
[root@k8s-master1 ~]# kubectl get pods -n app
NAME                                        READY   STATUS    RESTARTS       AGE
dsf-67b6bd65c9-44rl4                        2/2     Running   18 (17h ago)   26d
host-path-nginx                             2/2     Running   2 (17h ago)    17h
ingress-nginx-controller-74974c55bd-2bw2r   1/1     Running   7 (17h ago)    2d22h
ingress-nginx-controller-74974c55bd-j24mf   1/1     Running   11 (17h ago)   32d
nginx-55c7d65db4-t6mgz                      1/1     Running   0              79m
postgres-sonar-5b9d94cd6b-965tk             1/1     Running   3 (141m ago)   2d22h
tomcat-657677ffb5-2nrfc                     1/1     Running   9 (17h ago)    26d
[root@k8s-master1 ~]# kubectl get deployment -n app
Error from server (Forbidden): deployments.apps is forbidden: User "xiaom" cannot list resource "deployments" in API group "apps" in the namespace "app"

咱们创建一个集群权限,将这个权限赋予给xiaom这个用户,当前xiaom这个用户没有操作deployment的权限,咱们创建一个deployment的集群权限赋予给xiaom这个用户,这样xiaom这个用户可以操作所有命名空间下的deployment

ClusterRole可以对集群范围内资源、跨namespaces的范围资源、非资源类型进行授权

[root@k8s-master1 app]# kubectl apply -f app-ClusterRole.yaml
clusterrole.rbac.authorization.k8s.io/app-authorization-clusterrole created
[root@k8s-master1 app]# cat app-ClusterRole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: app-authorization-clusterrole
rules:- apiGroups: [ "apps" ]resources: [ "deployments" ]verbs: [ "get","delete","create","delete" ]

ClusterRoleBinding在整个集群级别和所有namespaces,将不同namespace中的subject(用户、用户组)与ClusterRole(集群范围内资源)绑定,授予权限

[root@k8s-master1 app]# kubectl apply -f app-ClusterRoleBinding.yaml
clusterrolebinding.rbac.authorization.k8s.io/app-authorization-clusterrole-binding created
[root@k8s-master1 app]# cat app-ClusterRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: app-authorization-clusterrole-binding
subjects:- kind: Username: xiaomapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: app-authorization-clusterroleapiGroup: rbac.authorization.k8s.io

RoleBinding可以引用ClusterRole,对属于同一命名空间内ClusterRole定义的资源主体进行授权

[root@k8s-master1 app]# cat app-RoleClusterBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: app-ClusterRoleBindingnamespace: app
subjects:- kind: Username: xiaomapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: app-authorization-clusterroleapiGroup: rbac.authorization.k8s.io
[root@k8s-master1 app]# kubectl config use-context xiaom@kubernetes
[root@k8s-master1 app]# kubectl get deployment -A
NAMESPACE              NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
app                    busybox                           0/0     0            0           35d
app                    dsf                               1/1     1            1           26d
app                    hostpath                          0/0     0            0           35d
app                    ingress-nginx-controller          2/2     2            2           32d
app                    nginx                             1/1     1            1           26d
app                    postgres-sonar                    1/1     1            1           3d
app                    tomcat                            1/1     1            1           32d
kube-devops            jenkins                           1/1     1            1           2d4h
kube-devops            nexus-sonatype-nexus              1/1     1            1           2d4h
kube-system            calico-kube-controllers           1/1     1            1           2d23h
kube-system            coredns                           1/1     1            1           2d22h
kubernetes-dashboard   dashboard-metrics-scraper         1/1     1            1           70d
kubernetes-dashboard   kubernetes-dashboard              1/1     1            1           70d
nfs-provisioner        nfs-subdir-external-provisioner   2/2     2            2           50d
test                   tomcat-deploy                     1/1     1            1           13d
[root@k8s-master1 app]# kubectl delete deployment hostpath -n app
deployment.apps "hostpath" deleted

这样xiaom这个用户就有操作所有命名空间下的deployment的权限

相关文章:

kubernetes 权限控制

RBAC引入了4个顶级资源对象&#xff1a;Role、ClusterRole&#xff1a;角色&#xff0c;用于指定一组权限&#xff1b;RoleBinding、ClusterRoleBinding&#xff1a;角色绑定&#xff0c;用于将角色&#xff08;权限&#xff09;赋予给对象 咱们通过Role可以配置命名空间下资源…...

vue中父组件异步传值,渲染问题

vue中父组件异步传值&#xff0c;渲染问题 父组件异步传值&#xff0c;子组件渲染不出来。有如下两种解决方法&#xff1a; 1、用v-if解决&#xff0c;当父组件有数据才渲染 <Child v-if"dataList && dataList.length > 0" :data-list"dataLis…...

09前后端分离+SSM整合的小案例

前端的Node 后端的Tomcat&#xff0c;是前端程序的容器。前端的npm 后端的maven 1. 导入前端项目 node版本&#xff1a;16.16.0 配置阿里镜像 npm config set registry https://registry.npmjs.org/ 更新npm版本 npm install -g npm9.6.6 用vscode打开解压后的项目 , 右上角…...

模仿ProTable创建ProTable组件

不多说废话直接上代码 父组件 // index.jsx/*** description 此ProTable是根据ProComponents里的ProTable模仿封装的简易版本* */ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useState } from react import { Card, Table } from antd import…...

新品发布 | 多通道总线记录仪TLog1004,是你期待的吗?

新品发布 2024年1月12日&#xff0c;同星智能又发布一款多通道 CAN &#xff08;FD&#xff09;总线、LIN 总线接口logger设备&#xff0c;此款产品在TLog1002基础上进行了升级&#xff0c;同时内置 3 路数字输入和 2 路数字输出&#xff0c;便于多种信号测量和系统集成。可以满…...

Double数据类型保留3位小数

Double scrapGrn scrapQty * Double.parseDouble(lot.getCnvrsnFctr()) / 1000 ; // 保留3位小数 DecimalFormat decimalFormat new DecimalFormat("#.###"); String scrapGrnStr decimalFormat.format(scrapGrn); 345.12344 处理后 为 345.123 34…...

08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)

目录 前言 一、膨胀&#xff08;Dilation&#xff09;与 腐蚀&#xff08;Erosion&#xff09; 二、形态学操作 1、开操作&#xff08;Opening&#xff09; 2、闭操作&#xff08;Closing&#xff09; 3、形态学梯度&#xff08;Morphological Gradient&#xff09; 4、…...

基于JavaWeb+SSM+Vue停车场微信小程序系统的设计和实现

基于JavaWebSSMVue停车场微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关…...

VUE---自定义指令

自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能。可分为全局注册与 局部注册。 全局注册&#xff08;main.js中注册&#xff09;&#xff1a; Vue.directive(指令名称,{ bind(ele,binding) {}, // 只执…...

开发安全之:Cross-Site Scripting (XSS) 漏洞

近期&#xff0c;我会结合研发云陆续发布开发安全相关的文章&#xff0c;欢迎大家关注&#xff01; Overview echo json_encode($arr)&#xff1a;向一个 Web 浏览器发送了未验证的数据&#xff0c;从而导致该浏览器执行恶意代码。 Details Cross-Site Scripting (XSS) 漏洞…...

代码随想录算法训练营第二十四天| 77. 组合

77.组合 public List<List<Integer>> combine(int n, int k) {if (n < k) {return null;}List<List<Integer>> list new ArrayList<>();List<Integer> path new ArrayList<>();backSource(n, path, list, k);return list;}pu…...

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam&#xff0c;有时只是慢&#xff0c;但是还是…...

What is `StringEscapeUtils.escapeHtml4` does?

StringEscapeUtils.escapeHtml4 作用是将特殊字符转换为它们对应的HTML实体形式&#xff0c;从而防止这些字符在网页中被解析为HTML标签或脚本&#xff0c;有助于防止跨站脚本攻击&#xff08;XSS, Cross-Site Scripting&#xff09; 依赖 <!--org.apache.commons.text.St…...

Dubbo 的心脏:理解和应用多种协议【十三】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Dubbo 的心脏&#xff1a;理解和应用多种协议【十三】 前言<dubbo:protocol> 基础<dubbo:protocol> 的定义和作用微服务中协议的重要性支持的协议类型配置示例 配置基本配置参数高级配置选…...

操作系统实验报告

目录 目录 实验一 一、实验结果 实验二 使用信号量实现进程互斥与同步 一、实验结果 1. 使用信号量实现有限缓冲区的生产者和消费者问题 2. 使用信号量实现读进程具有优先权的读者和写者问题 实验三 死锁和预防 一、实验要求 二、实验内容 三、实验结果 实验四 内…...

IPv6--ACL6(IPv6访问控制列表--基本ACL6配置)

ACL基本原理 ACL由一系列规则组成,通过将报文与ACL规则进行匹配,设备可以过滤出特定的报文。 ACL的组成 ACL编号: 在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同,这个后面具体讲。 规则: 前面提到了,一个AC…...

C和指针课后答案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 第八章课后答案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…...

C语言——大头记单词

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一发奋努力的背后&#xff0c;必有加…...

根据自己修改后的容器制作镜像并上传docker hub

要将自己的镜像上传到Docker Hub&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保已经在本地构建好了需要上传的 Docker 镜像。如果还没有构建&#xff0c;可以使用 docker build 命令来创建镜像。 登录到 Docker Hub 账号。打开终端或命令提示符&…...

Maven 基础安装配置及使用

大家好我是苏麟 , 今天聊聊Maven . Maven Maven , 是Apache公司下基于Java开发的开源项目 . 我们构建一个项目需要用到很多第三方的类库&#xff0c;需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌&#xff0c;并且Jar包之间的关系错综复杂&#xff0c;一…...

告别手动截图!用Python脚本从ROS bag文件里精准提取带时间戳的图片(附完整代码)

告别手动截图&#xff01;用Python脚本从ROS bag文件里精准提取带时间戳的图片&#xff08;附完整代码&#xff09; 在计算机视觉和机器人研究中&#xff0c;从ROS bag文件中高效提取带时间戳的图像数据是构建数据集的关键步骤。传统方法依赖ROS自带工具&#xff0c;但常面临提…...

别再乱调灯光和材质了!UE5渲染性能优化的三个核心禁忌与正确姿势

UE5渲染性能优化的三大禁忌与实战解决方案 在虚幻引擎5的渲染管线中&#xff0c;性能优化往往成为项目后期最棘手的挑战之一。许多开发者习惯性地将注意力集中在视觉效果上&#xff0c;却忽略了渲染效率的平衡。当场景复杂度达到临界点时&#xff0c;那些看似无害的高精度贴图…...

为什么纯向量 RAG 难以支撑长记忆?Graph RAG 的架构优势解析

前几天在调试一个企业级 Agent 时&#xff0c;遇到一个经典崩溃点&#xff1a;当用户问起“去年 10 月项目 A 失败的根本原因是什么”时&#xff0c;纯向量搜索&#xff08;Vector Search&#xff09;直接输出了几个毫不相关的会议纪要片段。 这是企业知识库问答中最常见的一类…...

别再只会用Burp改后缀了!5种Web文件上传绕过技巧原理深度拆解(.htaccess/MIME/00截断)

Web文件上传绕过技术&#xff1a;从原理到实战的深度解析 在CTF竞赛和实际渗透测试中&#xff0c;文件上传漏洞一直是高频出现的攻击面。许多开发者仅仅依赖简单的后缀名过滤或前端验证&#xff0c;却忽视了底层解析机制的复杂性。本文将深入剖析五种主流绕过技术的核心原理&am…...

Java后端如何通过异步非阻塞方式提高美团外卖API并发调用能力

Java后端如何通过异步非阻塞方式提高美团外卖API并发调用能力 在“外卖霸王餐”等高并发业务场景中&#xff0c;系统往往需要同时调用美团、饿了么等多个第三方API。传统的同步阻塞IO模型&#xff08;如使用RestTemplate或HttpClient直接调用&#xff09;会导致Tomcat工作线程在…...

当BFD不可用时:用华为NQA+静态路由实现低成本链路监测(含ICMP测试例详解)

华为NQA静态路由&#xff1a;低成本链路监测的实战指南 在传统企业网络中&#xff0c;静态路由因其配置简单、资源消耗低的特点&#xff0c;常被用于小型网络或边缘设备互联。但静态路由最大的痛点在于缺乏自动检测机制——当链路出现故障时&#xff0c;管理员往往要等到用户投…...

B+W 模块 BWU1664

BW (BihlWiedemann) BWU1664 是一款 ASi-3 专用模拟量输入模块&#xff0c;专为连接 Leuze ODSL 30 系列长距离激光测距传感器 设计&#xff0c;直接将测距数据接入 ASi 总线。一、核心定位系列&#xff1a;ASi-3 专用模拟量从站模块功能&#xff1a;2 路专用输入&#xff0c;直…...

深度解析Synology Photos面部识别补丁:从技术原理到实战部署完整指南

深度解析Synology Photos面部识别补丁&#xff1a;从技术原理到实战部署完整指南 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch Synology Photos Fa…...

自动驾驶避障算法实战:从动态规划(DP)到模型预测控制(MPC)的Matlab代码详解

自动驾驶避障算法实战&#xff1a;从动态规划到模型预测控制的Matlab实现 自动驾驶技术的核心挑战之一是如何在复杂环境中实现安全避障。本文将深入探讨两种主流算法——动态规划(DP)与模型预测控制(MPC)的代码级实现&#xff0c;通过Matlab示例展示它们如何协同工作来解决这一…...

终极免费图像浏览器:90+格式支持与专业体验指南

终极免费图像浏览器&#xff1a;90格式支持与专业体验指南 【免费下载链接】ImageGlass &#x1f3de; A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass ImageGlass是一款专为Windows用户设计的轻量级开源图像浏览器&am…...