当前位置 : 主页 > 操作系统 > centos >

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

来源:互联网 收集:自由互联 发布时间:2022-06-20
背景 一直以来在内网开发、测试环境的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权限进行优化_rancher

创建集群的用户角色Developer

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

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

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

在集群中进行授权

详细讲解如何对K8S权限进行优化_kubectl_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权限进行优化_k8s_05

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

【文章原创作者:武汉seo服务 http://www.5h5q.com提供,感谢支持】
上一篇:MYSQL主从复制搭建及排错
下一篇:没有了
网友评论