背景:在你的公司肯定也遇到一些帅气的developer想看集群pod日志,但又不想通过Dashborad/kibana/rancher/kubesphere这些图形界面来看,毕竟还是命令行tailf更方便嘛,哈哈,这是非常理解的!但是又不能把所有权限给到到开发人员,万一做个delete的sao操作,整个集群可能就跪了,那可能离提桶跑路就不远了!
需求:结合背景需求就很明了啦,就是创建一个只具有read集群pod资源的用户即可,结合RBAC授权即可。
开干前先简单介绍下RBAC:
RBAC:Role-base access control,字面意思就是基于角色的权限控制。定义一个角色,对哪些资源对象有哪些操作权限,这里特别说明是不能定义拒绝权限的。再把用户(serviceaccount或useraccount)binding绑定到定义好的角色上,从而使用户具有对应的权限就okk啦!
理解了上面的概念,那我们就开始拆解实现步骤:
# 1.创建私钥
(umask 077; openssl genrsa -out support.key 2048)
# 2.基于这个私钥生成一个自签证书,由ca.crt签署,生成证书签署请求("/CN=support" 就是账号的名字)
openssl req -new -key support.key -out support.csr -subj "/CN=support"
# 3.用ca.crt签证
openssl x509 -req -in support.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out support.crt -days 365
# 4.查看证书信息
openssl x509 -in support.crt -text -noout
# 5.support用户账号添加到用户认证
kubectl config set-credentials support --client-certificate=./support.crt --client-key=./support.key --embed-certs=true
# 6.查看用户信息
kubectl config view
# 7.设定上下文,让support也能访问kubernetes这个集群(不赋权限)
kubectl config set-context support@kubernetes --cluster=kubernetes --user=support
# 8.RBAC授权部分
# 定义一个角色,对哪些对象有哪些操作权限,(不能定义拒绝权限)
# 再把用户(serviceaccount或useraccount)binding绑定到定义好的角色上,从而使用户具有权限
# 8.1创建role
kubectl create role pods-reader --verb=get,list,watch --resource=pods
kubectl get role
# 8.2.创建rolebinding
kubectl create rolebinding bind-pod-reader --role=pods-reader --user=support
kubectl get rolebinding
# 8.3.创建clusterrole
kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods
kubectl get rolebinding
# 8.4.创建clusterrolebinding
kubectl create clusterrolebinding support-read-all-pods --clusterrole=cluster-reader --user=support
kubectl get clusterrolebinding
# 9.切换上下文
kubectl config use-context support@kubernetes
结束语:切换上下文之后,此时support对集群pod资源有read权限了,也就实现了上述需求,是不是很easy!哈哈哈,每天分享点小技巧,希望对大家的工作有些许帮助,因为时间有限每一步骤后没有贴图!有问题欢迎私信留言!
如果对文章感兴趣,欢迎关注公众号,一起探讨SRE相关技术!