为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 集群拥有企业级容器云平台的能力
关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...
随机推荐
- webapi Route 特性
转载:http://www.th7.cn/Program/net/201410/302571.shtml ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程 ...
- 【刷题】LOJ 6001 「网络流 24 题」太空飞行计划
题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 \(E = \{ E_1, E_2, \cdots, E_m ...
- 再谈Scala集合
集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下. 本文原文出处: 还是先上张图吧,这是我 ...
- 无旋treap板子!
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...
- 详解掩膜mask
什么是掩膜(mask) 数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的 ...
- TensorFlow最佳实践样例
以下代码摘自<Tensor Flow:实战Google深度学习框架> 本套代码是在 http://www.cnblogs.com/shanlizi/p/9033330.html 基础上进行 ...
- DNS ------ windows执行DNS过程
前言 TCP/IP协议是网络通讯的基础,平常在对TCP/IP协议设置时会涉及到IP地址,子网掩码,默认网关和DNS这几个参数.这里我们主要谈下IP地址和DNS这两个参数之间的关系. 首先计算机在网络中 ...
- 最小化安装k8s
最小化安装k8s Nick_4438 关注 2018.07.11 10:40* 字数 670 阅读 0评论 0喜欢 0 1.前言 之前写过一篇二进制手工安装k8s的文章,过程复杂,搞了多日才安装成功. ...
- JAVA中日期转换和日期计算的方法
日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 public class TestDateConvertUtil { ...
- VMware ESXI6.0服务器安装
1.制作一个ESXI6.0的系统安装盘 2.服务器启动后加载VMware ESXi 6.0的ISO文件,开始安装. 3.ESXi引导装入程序,VMware ESXi引导过程,在屏幕上方显示的版本号.内 ...