TKE容器实现限制用户在多个namespace上的访问权限(上)
时间:2022-07-22
本文章向大家介绍TKE容器实现限制用户在多个namespace上的访问权限(上),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
kubernetes应用越来越广泛,我们kubernetes集群中也会根据业务来划分不同的命名空间,随之而来的就是安全权限问题,我们不可能把集群管理员账号分配给每一个人,有时候可能需要限制某用户对某些特定命名空间的权限,比如开发和测试人员也可能需要登录集群,了解应用的运行情况,查看pod的日志,甚至是修改某些配置。这时候,我们可以通过创建受限的kubeconfig文件,将该config分发给有需要的人员,让他们能通过kubectl命令实现一些允许的操作
第一步:
1,创建集群级别的角色 ClusterRole
clusterrole.dev-log.yaml 用于提供对pod的完全权限和其它资源的查看权限.
[root@VM-0-225-centos ~]# vi clusterrole.dev-log.yaml
添加如下内容:
# 提供基本权限
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: dev-log
rules:
- apiGroups:
- ""
resources:
- pods
- pods/exec
verbs:
- create
- get
- list
- watch
- apiGroups:
- ""
resources:
- pods
verbs:
- delete
- apiGroups:
- ""
resources:
- endpoints
- services
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- bindings
- events
- limitranges
- namespaces/status
- pods/log
- pods/status
- replicationcontrollers/status
- resourcequotas
- resourcequotas/status
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- namespaces
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- deployments
- deployments/rollback
- deployments/scale
- statefulsets
verbs:
- get
- list
- watch
- apiGroups:
- autoscaling
resources:
- horizontalpodautoscalers
verbs:
- get
- list
- watch
- apiGroups:
- batch
resources:
- cronjobs
- jobs
- scheduledjobs
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- daemonsets
- deployments
- ingresses
- replicasets
verbs:
- get
- list
- watch
在default命名空间应用配置文件
[root@VM-0-225-centos ~]# kubectl apply -f clusterrole.dev-log.yaml -n default
clusterrole.rbac.authorization.k8s.io/dev-log created(返回该内容表示创建成功)
[root@VM-0-225-centos ~]# kubectl get ClusterRole -n default #查看创建的ClusterRole
2,在default命名空间创建 ServiceAccount
创建ServiceAccount后,会自动创建一个绑定的 secret ,后面在kubeconfig文件中,会用到该secret中的token
[root@VM-0-225-centos ~]# kubectl create serviceaccount dev -n default
serviceaccount/dev created
[root@VM-0-225-centos ~]# kubectl get serviceaccount -n default
NAME SECRETS AGE
default 1 104m
dev 1 8s
3,对ServiceAccount和集群角色建立绑定关系
对需要的namespace进行授权,以下示例为对app命名空间授权
[root@VM-0-225-centos ~]# kubectl create rolebinding rbd-dev --clusterrole=dev-log --serviceaccount=default:dev --namespace=app ###--namespace添加对应环境的namespace名称
rolebinding.rbac.authorization.k8s.io/rbd-dev created
[root@VM-0-225-centos ~]# kubectl get serviceaccounts dev -o yaml ##查看sa详情
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2020-07-22T15:06:16Z"
name: dev
namespace: default
resourceVersion: "181632561"
selfLink: /api/v1/namespaces/default/serviceaccounts/dev
uid: e441b8b8-cc2c-11ea-8e87-ee191d757651
secrets:
- name: xxxxxx ###对应的secret名称为,下一步要使用
[root@VM-0-225-centos ~]# kubectl get secrets dev-token-62fjx -o yaml
apiVersion: v1
data:
ca.crt: xxxxxxxxxx ###内容同一个集群该内容一致,不需要关注
namespace: ZGVmYXVsdA==
token: xxxxxx ##这个就是token后续配置kubeconfig时需要使用 该token是经过base64处理的,需要进行解码处理
kind: Secret
metadata:
annotations:
kubernetes.io/service-account.name: dev
kubernetes.io/service-account.uid: e441b8b8-cc2c-11ea-8e87-ee191d757651
creationTimestamp: "2020-07-22T15:06:16Z"
name: dev-token-62fjx
namespace: default
resourceVersion: "181632560"
selfLink: /api/v1/namespaces/default/secrets/dev-token-62fjx
uid: e443bb42-cc2c-11ea-8e87-ee191d757651
type: kubernetes.io/service-account-token
[root@VM-0-225-centos ~]# echo xxxx |base64 -d ### XXX代表上一步查询到的token 该token是经过base64处理的,需要进行解码处理
- 剑指OFFER之二维数组中的查找(九度OJ1384)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 简单的客户机服务器投射模拟
- 使用gcc编译gdb调试
- 剑指OFFER之第一个只出现一次的字符(九度OJ1283)
- c++中类长度解析
- 剑指OFFER之丑数(九度OJ1214)
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
- 剑指OFFER之从1到n中出现1的次数(九度OJ1373)
- 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
- 剑指OFFER之最小的K个数(九度OJ1371)
- 剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)
- 如何成为一名10x的数据分析师?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- esp8266+oled+DHT 11温湿度显示
- esp8266+oled 显示时间日期
- esp8266+DHT11温湿传感器 制作web室内温度计
- Linux端口转发的几种常用方法
- kali破解wifi密码
- 面向对象的7种设计原则(7)-开闭原则
- [数据库介绍]一站式表达谱数据分析
- windows下hashcat利用GPU显卡性能破解密码
- TCGAG多组学联合分析数据库
- Docker安装及使用
- CVE-2020-0796漏洞复现(RCE)
- Jenkins持续集成平台安装
- mysql架构备份之M-S-S级联复制
- Docker构建lnmp环境部署typecho
- MANJARO KDE安装配置(已换Arch Linux,此贴可能废弃)