为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 集群拥有企业级容器云平台的能力
关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...
随机推荐
- 11Java网络编程
十一.网络编程 11.1 网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对 ...
- BZOJ4520 CQOI2016K远点对(KD-Tree+堆)
堆维护第k大,每个点KD-Tree上A*式查询较远点,跑得飞快,复杂度玄学. #include<iostream> #include<cstdio> #include<c ...
- P3254 圆桌问题
题目链接 非常简单的一道网络流题 我们发现每个单位的人要坐到不同餐桌上,那也就是说每张餐桌上不能有同一单位的人.这样的话,我们对于每个单位向每张餐桌连一条边权为1的边,表示同一餐桌不得有相同单位的人. ...
- Number Clicker CodeForces - 995E(双向bfs)
双向bfs 注意数很大 用map来存 然后各种难受....
- MySQL删除数据库时的错误(errno: 39)
由于mysql数据库是默认区分大小写的,部署的时候发现多了一些重复的表,于是就把多余的表删掉了.可是,剩下的重复的表再删除时会提示:表不存在. 于是,想把数据库删掉重新创建,可是,得到了 ERROR ...
- 洛谷 P1457 城堡 The Castle 解题报告
P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰" ...
- AC自动机——多个kmp匹配
(并不能自动AC) 介绍: Aho-Corasick automaton,最经典的处理多个模式串的匹配问题. 是kmp和字典树的结合. 精髓与灵魂: ①利用trie处理多个模式串 ②引入fail指针. ...
- Pair_2测试与优化
# Pair_2测试与优化 211606316李震 21160305胡彤 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分 ...
- Git基本知识
一,安装 Ubuntu安装git:sudo apt-get install git-core Centos安装git:yum install git-core 二,配置身份---在提交代码时可以辨别身 ...
- 对Property进行RACObserve
@property (assign,nonatomic) int price; @property (assign,nonatomic) int time; [RACObserve(self,pric ...