为K8S集群建立只读权限帐号
参考URL:
https://www.jianshu.com/p/a1a0d64f1245
https://mritd.me/2018/03/20/use-rbac-to-control-kubectl-permissions/
https://studygolang.com/articles/11730?fr=sidebar
公司的k8s集群里的运维用户是为k8s的运维同事增加的。有的研发同事也需要登陆到k8s的master上,查看一些日志,或是了解一下k8s的运行信息。这里,我们就需要新增一个只读权限供研发同事操作。
要建立一个对k8s集群信息只读权限的帐户,重点就是限制用户运行kubectl命令的权限。用户运行kubectl命令时,默认是读取用户目录下的~/.kube/config文件,并将其中的认证信息与k8s集群的api server认证鉴权。之后,就会用提定的权限,与k8s的集群打交道了。
建立一个只读权限的帐号,分为如下三大步骤:
- 使用集群证书为指定用户生成集群认证信息(我们举例的k8s集群用户为xxx)。
- 使用认证信息,生成kube.config文件。
- 建立合适的cluster-role,并将此角色与前面的用户进行clouster-role-binding操作。
一,使用集群证书生成用户认证信息
1, 使用docker帐号登陆k8s集群的master机器。
2, 下载https://pkg.cfssl.org/下的软件放到机器的/tmp/目录。(cfssl,cfssljson)
本来下载的文件为:cfssl_linux-amd64,cfssljson_linux-amd64。最好更改为短名字(后面演示的名称为cfssl和cfssljson),并使用chmod +x 增加执行权限。
3, 将/etc/kubernetes/pki/目录下的ca.crt和ca.key文件cp到/tmp/目录。
cp /etc/kubernetes/pki/ca.crt /tmp/ca.crt
cp /etc/kubernetes/pki/ca.key /tmp/ca.key
4, 在/tmp/目录下生成ca-config.json文件,内容如下:
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
5, 在/tmp/目录下生成xxx-csr.json文件,内容如下:
{
"CN": "xxx",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShangHai",
"L": "ShangHai",
"O": "k8s",
"OU": "System"
}
]
}
6, 运行如下命令,生成xxx.pem和xxx-key.pem文件。
./cfssl gencert -ca=./ca.crt -ca-key=./ca.key -config=./ca-config.json \
-profile=kubernetes xxx-csr.json | ./cfssljson -bare xxx
二,使用认证信息,生成kube.config文件
1, 将/etc/kubernetes/目录下的admin.conf文件cp到/tmp/目录,并重命名。
cp /etc/kubernetes/admin.conf ./ro-user.kubeconfig
2, 运行如下xxx.sh脚本,生成最终的config文件。
kubectl config set-credentials xxx \ --client-certificate=xxx.pem \ --client-key=xxx-key.pem \ --embed-certs=true \ --kubeconfig=ro-user.kubeconfig kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=xxx \ --kubeconfig=ro-user.kubeconfig kubectl config use-context kubernetes --kubeconfig=ro-user.kubeconfig
3, 将config文件更名为config文件。
cp ro-user.kubeconfig config
4, 使用研发用户登陆,并将/tmp/config文件cp到~/.kube/目录下。
mkdir ~/.kube/
cp /tmp/config ~/.kube/
三,使用K8s的RBAC授权
1, 建立一个cluster-role-ro.yaml文件,生成只读资源。
以下文件,可以在导出集群管理员权限基础之上修改,命令为
kubectl get clusterrole admin -o yaml >cluster-role-ro.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cro-readonly rules: - apiGroups: - "" resources: - pods - pods/attach - pods/exec - pods/portforward - pods/proxy verbs: - get - list - watch - apiGroups: - "" resources: - configmaps - endpoints - persistentvolumeclaims - replicationcontrollers - replicationcontrollers/scale - secrets - serviceaccounts - services - services/proxy 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: - "" resources: - serviceaccounts verbs: - impersonate - apiGroups: - apps resources: - daemonsets - deployments - deployments/rollback - deployments/scale - replicasets - replicasets/scale - statefulsets verbs: - get - list - watch - apiGroups: - autoscaling resources: - horizontalpodautoscalers verbs: - get - list - watch
2, 建立cluster-rolebinding-ro.yaml文件,绑定用户和资源。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: k8s-ro-cluster
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cro-readonly
subjects:
- kind: User
name: xxx
apiGroup: rbac.authorization.k8s.io
3, 在运维用户下,使用kubectl apply –f 命令将这两个yaml文件应用于集群。
4, 使用研发用户登陆,并进行命令测试。
比如,运行如下命令,显示OK。
kubectl --kubeconfig=/tmp/ro-user.kubeconfig get pod --all-namespaces -o wide
再比如,运行如下命令,显示无权限。
kubectl apply -f xxx-dep-svc.yaml
from server for: "xxx-dep-svc.yaml": deployments.extensions "xxx" is forbidden: User "xxx" cannot get deployments.extensions in the namespace "kube-system"
至此,K8S集群的只读权限帐号建立完成。
后期改进方向:
l 在统一的机器上制作,然后分发。
l 操作脚本化,加快工作效率。
为K8S集群建立只读权限帐号的更多相关文章
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)
公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...
- K8s集群认证之RBAC
kubernetes认证,授权概括总结: RBAC简明总结摘要:API Server认证授权过程: subject(主体)----->认证----->授权[action(可做什么)]--- ...
- Kubernetes全栈架构师(二进制高可用安装k8s集群扩展篇)--学习笔记
目录 二进制Metrics&Dashboard安装 二进制高可用集群可用性验证 生产环境k8s集群关键性配置 Bootstrapping: Kubelet启动过程 Bootstrapping: ...
- 通过Heketi管理GlusterFS为K8S集群提供持久化存储
参考文档: Github project:https://github.com/heketi/heketi MANAGING VOLUMES USING HEKETI:https://access.r ...
- Kubernetes实战总结 - 阿里云ECS自建K8S集群
一.概述 详情参考阿里云说明:https://help.aliyun.com/document_detail/98886.html?spm=a2c4g.11186623.6.1078.323b1c9b ...
- k8s集群部署(2)
一.利用ansible部署kubernetes准备阶段 1.集群介绍 基于二进制方式部署k8s集群和利用ansible-playbook实现自动化:二进制方式部署有助于理解系统各组件的交互原理和熟悉组 ...
- 使用kind快速搭建本地k8s集群
Kind是什么? k8s集群的组成比较复杂,如果纯手工部署的话易出错且时间成本高.而本文介绍的Kind工具,能够快速的建立起可用的k8s集群,降低初学者的学习门槛. Kind是Kubernetes I ...
- 轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力
关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...
随机推荐
- Java8新特性之Stream
原文链接:http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验( ...
- Django_博客项目 注册用户引发 ValueError: The given username must be set
博客项目中 注册功能在ajax 提交数据时 报错 ValueError: The given username must be set 锁定到错误点为 判定为是无法获取到 username 字段 那先 ...
- native2ascii -reverse -encoding UTF-8 validation_msg.properties > validation_msg_src.properties
native2ascii -reverse -encoding UTF-8 validation_msg.properties > validation_msg_src.properties
- MT【171】共轭相随
$\textbf{证明:}$对任意$a,b\in R^+$, $\dfrac{1}{\sqrt{a+2b}}+\dfrac{1}{\sqrt{a+4b}}+\dfrac{1}{\sqrt{a+6b}} ...
- MT【86】两个绝对值之和最大
分析:这里只需要注意到$(|x|+|y|)_{max}=max\{|x+y|,|x-y|\}$,所以只需求$max\{|20a|,|14b|\}$ 进而变成熟悉的反解系数问题.容易知道最大值为$a=2 ...
- 【刷题】BZOJ 3033 太鼓达人
Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和ly ...
- Tomcat:IOException while loading persisted sessions: java.io.EOFException
Tomcat:IOException while loading persisted sessions: java.io.EOFException 产生原因: 最近将项目名称修改了一下,然后启动项目, ...
- UVAlive-7040 color(组合数学,二项式反演)
链接:vjudge 题目大意:有一排方格共 $n$ 个,现在有 $m$ 种颜色,要给这些方格染色,要求相邻两个格子的颜色不能相同.现在问恰好用了 $k$ 种颜色的合法方案数.答案对 $10^9+7$ ...
- asp.net mvc 全局权限过滤器及继成权限方法
全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...
- 以Java的视角来聊聊BIO、NIO与AIO的区别?
转: 以Java的视角来聊聊BIO.NIO与AIO的区别? 飞丫玲丫 17-07-2623:10 题目:说一下BIO/AIO/NIO 有什么区别?及异步模式的用途和意义? BIO(Blocking I ...