为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 集群拥有企业级容器云平台的能力
关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...
随机推荐
- 1019C Sergey's problem(思维)
题意: 找出来一个点集S 使得S中的点不能互相通过一步到达 并且S中的点 可以在小于等于2的步数下到达所有的点 要父结点 不要子结点 这样就求出来一个点集S‘ 而S'中可能存在 v -> u ...
- BZOJ2001 [Hnoi2010]City 城市建设 CDQ分治
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec Memory Limit: 162 MB Description PS国是一个拥有诸多城市的大国,国王Lou ...
- JAVA类变量(静态变量)
类变量也称为静态变量,在类中以static关键字声明,但必须在方法.构造方法和语句块之外. -无论一个类创建了多少个对象,类只拥有类变量的一份拷贝. -静态变量除了被声明为常量外很少使用.常量是指声明 ...
- 洛谷 P5108 仰望半月的夜空 解题报告
P5108 仰望半月的夜空 题目描述 半月的夜空中,寄托了多少人与人之间的思念啊 曦月知道,这些思念会汇集成一个字符串\(S(n = |S|)\) 由于思念汇集的过于复杂,因此曦月希望提炼出所有的思念 ...
- 文件操作,内置函数open()
先看看官方说明: The default mode is 'r' (open for reading text, synonym of 'rt'). For binary read-write acc ...
- Random Projection在k-means的应用
1. 随机投影 (Random Projection) 首先,这是一种降维方法.之前已经介绍过相对普遍的PCA的降维方法,这里介绍另一种降维方法Random Project.相比于PCA,他的优势可以 ...
- Hadoop生态圈-zookeeper本地搭建以及常用命令介绍
Hadoop生态圈-zookeeper本地搭建以及常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载zookeeper软件 下载地址:https://www.ap ...
- element-ui 设置input的只读或禁用
只读:readonly 在data里定义:readonly: true, 然后在input框里加上readonly就可以了. 禁用:disabled 在data里定义:edit: true, 然后在i ...
- 何凯文每日一句打卡||DAY13
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...