ToB企服应用市场:ToB评测及商务社交产业平台

标题: k8s权限管理(RBAC) [打印本页]

作者: 勿忘初心做自己    时间: 2024-5-26 01:58
标题: k8s权限管理(RBAC)
1:安全认证

1、访问控制概述

服务账户:


2、焦点概念

1、脚色(Role)与集群脚色(ClusterRole)

用于定义对资源的访问权限
2、脚色绑定(RoleBinding)与集群脚色绑定(ClusterRoleBinding)

在kubernetes中,脚色绑定和集群脚色绑定用于将用户,组,或服务账户与脚色或集群脚色关联起来,从而赋予他们相应的权限,他们的作用就是将权限分配给特定的实体,使其能够执行定义在脚色或集群脚色中的操作
3、主体(Subject)

在kubernetes中,主体(Subject)是具有身份的实体,通常是用户,组,或服务账户,主体通过脚色绑定或者集群脚色绑定与脚色或者集群脚色关联在一起,从而获取对kubernetes资源的访问权限
3、RBAC在k8s中实现

1、k8s api server与RBAC组件

kubernetes api server与RBAC组件之间实现认证授权机制过程如下
2、RBAC权限查抄流程

RBAC(基于脚色的访问控制),在k8s中权限查抄流程如下

2、操作

1、Role资源的编写
  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: Role
  3. metadata:
  4.    name: pod-reader   #角色的名称
  5.    namespace: dev     #名称空间的权限设置
  6. rules:
  7. - apiGroups: [""]  #管理的资源组
  8.   resources: ["pods"]   #具体的资源
  9.   verbs: ["get","list"]   #具体的操作
  10. #rule只能对于一个名称空间设置权限,
复制代码
3、创建平常用户和服务账户

1、创建平常用户

原理:通过创建证书和切换上下文环境的方式来创建和切换用户
  1. #创建证书
  2. ##创建私钥
  3. [root@master ~]# openssl genrsa -out devuser.key 2048
  4. ##利用私钥创建一个csr(证书请求)文件
  5. openssl req -new -key devuser.key -subj "/CN=devuser" -out devuser.csr
  6. ##私钥加上请求文件生成证书
  7. openssl x509 -req -in devuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out devuser.crt -days 365
  8. #生成账号
  9. [root@master ~]#  kubectl config set-credentials devuser --client-certificate=./devuser.crt --client-key=./devuser.key --embed-certs=true
  10. User "devuser" set.
  11. #设置上下文参数,这里设置名称空间没有直接的关系,并不是这个用户只能在这个名称空间下面操作,其他的空间也可以,要设置权限
  12. kubectl config set-context devuser@kubernetes --cluster=kubernetes --user=devuser --namespace=dev
  13. #查看上下文
  14. [root@master ~]#  kubectl config get-contexts
  15. CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
  16.           devuser@kubernetes            kubernetes   devuser            dev
  17. *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
  18. #切换为创建的用户的上下文环境中
  19. [root@master ~]# kubectl config use-context devuser@kubernetes
  20. Switched to context "devuser@kubernetes".
  21. #发现看不了,因为没有设置这个用户的相关的权限
  22. [root@master ~]# kubectl get pod -n dev
  23. Error from server (Forbidden): pods is forbidden: User "devuser" cannot list resource "pods" in API group "" in the namespace "dev"
  24. #对账号进行授权,先切换回来
  25. kubectl config use-context kubernetes-admin@kubernetes
  26. #授权文件
  27. apiVersion: rbac.authorization.k8s.io/v1
  28. kind: Role
  29. metadata:
  30.    name: devuser-role
  31.    namespace: dev
  32. rules:
  33. - apiGroups: ["*"]
  34.   resources: ["pods"]
  35.   verbs: ["list"]  #这里只设置了list这个权限,就是查看名称空间下面的所有资源
  36. ---
  37. apiVersion: rbac.authorization.k8s.io/v1
  38. kind: RoleBinding
  39. metadata:
  40.    name: devuser-rolebinding
  41.    namespace: dev
  42. subjects:
  43. - kind: User
  44.   name: devuser
  45.   apiGroup: rbac.authorization.k8s.io
  46. roleRef:
  47.   kind: Role
  48.   name: devuser-role
  49.   apiGroup: rbac.authorization.k8s.io
  50. [root@master role]# kubectl create -f devuser.yaml
  51. role.rbac.authorization.k8s.io/devuser-role created
  52. rolebinding.rbac.authorization.k8s.io/devuser-rolebinding created
  53. #切换到创建的新用户上面,切换上下文件环境
  54. #发现只有获取这个名称空间下面资源的权限,其余的权限都没有赋予
  55. [root@master role]# kubectl config use-context devuser@kubernetes
  56. Switched to context "devuser@kubernetes".
  57. [root@master role]# kubectl get pod -n dev
  58. NAME     READY   STATUS    RESTARTS   AGE
  59. centos   1/1     Running   0          21h
  60. [root@master role]# kubectl delete pod -n dev centos
  61. Error from server (Forbidden): pods "centos" is forbidden: User "devuser" cannot delete resource "pods" in API group "" in the namespace "dev"
复制代码
2、创建组

3、创建服务账户
  1. [/code][size=4]3、账户相关的操作[/size]
  2. [code]#查看上下文
  3. [root@master ~]#  kubectl config get-contexts
  4. CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
  5.           devuser@kubernetes            kubernetes   devuser            dev
  6. *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
  7. #查看用户相关的权限,查看绑定的相关
  8. [root@master ~]# kubectl get rolebindings --all-namespaces | grep devuser
  9. [root@master ~]# kubectl get clusterrolebindings | grep devuser
复制代码

4、参数的设置

1、kind为role,clusterrole资源

1、verbs参数
  1. #Role,ClusterRole Verbs可以配置参数,定义的是操作
  2. * 包含所有的
  3. get --- 读取单个资源的详细信息,kubectl get pod my-pod -o yaml
  4. list --- 列出这个名称空间下面的所有资源,kubectl get pods
  5. watch --- 用于监视资源的变化事件(添加,删除,更新),kubectl get pods --watch
  6. create --- 创建新的资源实例,kubectl create -f pod.yaml
  7. update --- 用于更新现有的配置信息,kubectl apply -f pod.yaml
  8. patch --- 更新部分现有的数据,kubectl patch pod my-pod -p '{"spec":{"containers":[{"name":"my-container","image":"my-new-image"}]}}'
  9. delete --- 删除数据,kubectl delete pod my-pod
  10. exec --- 在容器内执行命令,kubectl exec -it my-pod -- /bin/bash
复制代码
2、resource参数
  1. * 包含所有的资源类型
  2. “services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”
复制代码
3、apigroup参数
  1. #定义的是api资源,不同的类型
  2. "*" --- 核心api组,pods,service,endpoint,namespace,nodes等
  3. "apps" --- 控制器资源,deployments,daemonsets,statefulsets,replicasets等
  4. "autoscaling" ---  API 组包含用于自动调整工作负载规模的资源,horizontalpodautoscalers (HPA)
  5. "batch" --- API 组包含用于批处理任务的资源,jobs: 一次性任务,确保一个或多个 Pods 成功完成。
  6. cronjobs: 基于时间调度的作业。
复制代码
2、RoleBinding和ClusterRoleBinding参数

1、subject参数
  1. subjects:
  2. - kind: ServiceAccount   #认证账户,服务账户,还有别的参数User
  3.   name: mark   #名字
  4.   namespace: default   #名称空间
复制代码
2、roleRef参数
  1. roleRef:   #绑定角色的方式
  2.   kind: ClusterRole   #集群角色绑定
  3.   name: pod-clusterrole  #角色的名字
  4.   apiGroup: rbac.authorization.k8s.io  #api 资源类型
复制代码
请求经过apiserver时,必须经过的
认证,授权,准入控制
2、


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4