鸿 网 互 联 www.68idc.cn

详细讲解如何对K8S权限进行优化

来源:互联网 作者:佚名 时间:2022-07-19 11:15
背景 一直以来在内网开发、测试环境的K8S web控制台使用的是rancher面板。 通过使用rancher面板服务,在容器管理上运维、开发、测试人员的工作效率得到了极大的提升 ?问题 由于早期仅
背景

一直以来在内网开发、测试环境的K8S web控制台使用的是rancher面板。

通过使用rancher面板服务,在容器管理上运维、开发、测试人员的工作效率得到了极大的提升


?问题

由于早期仅注重功能实现及用户体验上问题,忽略了权限管理上的问题。给用户开放出去的rancher面板用户均为cluster-owner权限。导致最近一天,突然接到研发人员的通知,说开发环境namespace下的所有工作负载都消失了。通过排查,发现问题时刻所有的node节点都正常运行,dev namespace已不存在,另外两个 test1、test2?namespace下的全部资源均运行正常。

因此初步怀疑是人工方式对namespace进行了删除操作,将dev namespace下的全部资源删除(包括secret、sa、configmap、pvc、deployment、svc等)

用户可能通过rancer面板删除namespace,也有少部分研发人员有服务器权限,可以操作kubectl工具进行删除操作,因此需要对rancher和kubectl工具进行权限配置

?解决方案

1、首先对环境进行恢复

2、对rancher面板的权限配置

3、对kubect客户端进行权限配置


Rancher权限配置

当前rancher的用户均为全部类型的本地用户,在授权上将本地用户授权给集群

详细讲解如何对K8S权限进行优化_kubectl

创建集群的用户角色Developer

详细讲解如何对K8S权限进行优化_kubectl_02

对新创建的角色进行授权,新的角色需要继承cluster member和view all projects角色的权限

详细讲解如何对K8S权限进行优化_rancher_03

在集群中进行授权

详细讲解如何对K8S权限进行优化_rancher_04

kubectl权限配置

创建serviceaccount

kubectl?create?sa?developer

置developer-role的相关权限

cat?<<EOF?|?kubectl?apply?-f?-? apiVersion:?rbac.authorization.k8s.io/v1 kind:?ClusterRole metadata: ??annotations: ????rbac.authorization.kubernetes.io/autoupdate:?"true" ??labels: ????kubernetes.io/bootstrapping:?rbac-defaults ??name:?developer-role ??namespace:?default rules: -?apiGroups: ??-?"" ??resources: ??-?pods ??-?configmaps ??-?services ??verbs: ??-?get ??-?list ??-?watch ??-?patch? -?apiGroups: ??-?traefik.containo.us ??resources: ??-?ingressroutes ??verbs: ??-?create ??-?delete ??-?get ??-?list ??-?watch ??-?update ??-?patch?? -?apiGroups: ??-?apps ??resources: ??-?pods ??-?deployments ??-?services?? ??verbs: ??-?get ??-?list ??-?watch ??-?create ??-?update ??-?patch? EOF

通过配置ClusterRoleBinding绑定serviceaccount和ClusterRole

cat?<<EOF?|?kubectl?apply?-f?-? apiVersion:?rbac.authorization.k8s.io/v1 kind:?ClusterRoleBinding metadata: ??name:?developer-role-binding ??namespace:?default roleRef: ??apiGroup:?rbac.authorization.k8s.io ??kind:?ClusterRole ??name:?developer-role subjects: -?kind:?ServiceAccount ??name:?developer ??namespace:?default EOF

将密钥中的ca.crt解码后导出

kubectl?get?secret??developer-token-2rz7l?-n?default?-oyaml?|grep?ca.crt:|awk?'{print?$2}'?|base64?-d?>?/home/ca.crt

生成config文件

kubectl?config?set-cluster?fjhb-lan-k8s?--server=https://192.168.1.59:9443?--certificate-authority=/home/ca.crt?--embed-certs=true?--kubeconfig=/home/test.config

将developer sa的token更新到config文件中

kubectl?config?set-cluster?fjhb-lan-k8s?--server=https://192.168.1.59:9443?--certificate-authority=/home/ca.crt?--embed-certs=true?--kubectoken=$(kubectl?describe?secret?developer-token-2rz7l?-n?default?|?awk?'/token:/{print?$2}') export?token=$(kubectl?describe?secret?developer-token-2rz7l?-n?default?|?awk?'/token:/{print?$2}') kubectl?config?set-credentials?developer?--token=$token?--kubeconfig=/home/test.config

配置集群认证访问的上下文信息

kubectl?config?set-context?developer?--cluster=fjhb-lan-k8s?--user=developer?--kubeconfig=/home/test.config kubectl?config?use-context?developer?--kubeconfig=/home/test.config

测试与验证

kubectl?get?cm?-n?default?--kubeconfig=/home/test.config kubectl?get?cm?-n?test1?--kubeconfig=/home/test.config?? kubectl?delete?cm?ingress-controller-leader-nginx?-n?default?--kubeconfig=/home/test.config

详细讲解如何对K8S权限进行优化_rancher_05

后续将test.config复制到kubectl客户端所在的主机上,放在运行命令用户的~/.kube目录下,重命名为config,即可达到预期效果!

上一篇:MYSQL主从复制搭建及排错
下一篇:没有了
网友评论
<