文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

实践中理解Kubernetes RBAC之Role

2024-12-03 04:06

关注

创建访问architechure命名空间的用户

给用户devops 创建一个私钥

  1. openssl genrsa -out devops.key 2048 

使用我们刚刚创建的私钥创建一个证书签名请求文件:devops.csr,要注意需要确保在-subj参数中指定用户名和组(CN表示用户名,O表示组)

  1. openssl req -new -key devops.key -out devops.csr -subj "/CN=devops/O=architechure" 

然后找到我们的Kubernetes集群的CA,我们使用的是kubeadm安装的集群,CA相关证书位于/etc/kubernetes/pki/目录下面,如果你是二进制方式搭建的,你应该在最开始搭建集群的时候就已经指定好了CA的目录,我们会利用该目录下面的ca.crt和ca.key两个文件来批准上面的证书请求,生成最终的证书文件,我们这里设置证书的有效期为500天

  1. scp root@172.16.99.128:/etc/kubernetes/pki/ca.crt . 
  2. scp root@172.16.99.128:/etc/kubernetes/pki/ca.key . 
  3. openssl x509 -req -in devops.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out devops.crt -days 500 
  4. ➜  ls -al 
  5. total 72 
  6. drwxr-xr-x  11 marion  staff   352 Dec 25 11:32 . 
  7. drwxr-xr-x  13 marion  staff   416 Dec 25 11:26 .. 
  8. -rw-r--r--   1 marion  staff    17 Dec 25 11:32 .srl 
  9. -rw-r--r--   1 marion  staff  1156 Dec 25 11:32 README.md 
  10. -rw-r--r--   1 marion  staff  1025 Dec 25 11:30 ca.crt 
  11. -rw-------   1 marion  staff  1675 Dec 25 11:30 ca.key 
  12. -rw-r--r--   1 marion  staff  1009 Dec 25 11:32 devops.crt 
  13. -rw-r--r--   1 marion  staff   924 Dec 25 11:30 devops.csr 
  14. -rw-r--r--   1 marion  staff  1679 Dec 25 11:27 devops.key 

现在我们可以使用刚刚创建的证书文件和私钥文件在集群中创建新的凭证:

  1. kubectl config set-credentials devops --client-certificate=devops.crt  --client-key=devops.key 

通过刚才创建的用户凭证创建新的上下文(Context)

  1. #如果你的电脑上正在管理多个集群的,可能你的集群名字会被改变,因此在下面的--cluster参数处指明实际的集群名称,如下图 
  2. kubectl config set-context devops-context --cluster=cluster-tf26gt9mmk --namespace=architechure --user=devops 

尝试通过该用户操作命令

  1. ➜  kubectl get pods --context=devops-context 
  2. Error from server (Forbidden): pods is forbidden: User "devops" cannot list resource "pods" in API group "" in the namespace "architechure" # 因为该devops-context还没有操作API的权限 

给用户创建一个role的角色devops.role.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1 
  2. kind: Role 
  3. metadata: 
  4.   name: devops-role 
  5.   namespace: architechure 
  6. rules: 
  7. - apiGroups: ["""extensions""apps"
  8.   resources: ["deployments""replicasets""pods"
  9.   verbs: ["get""list""watch""create""update""patch""delete"] # 也可以使用['*'

然后在集群中创建该角色

  1. kubectl apply -f ./devops.role.yaml 

创建权限与角色之间的绑定关系devops-rolebinding.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1 
  2. kind: RoleBinding 
  3. metadata: 
  4.   name: devops-rolebinding 
  5.   namespace: architechure 
  6. subjects: 
  7. - kind: User 
  8.   name: devops 
  9.   apiGroup: "" 
  10. roleRef: 
  11.   kind: Role 
  12.   name: devops-role # 上一步创建的devops-role实体 
  13.   apiGroup: "" 

在集群中创建角色与用户之间的绑定关系

  1. k apply -f ./devops-rolebinding.yaml 

此时我们可以通过kubecm切换到该角色上

此时,从下图就可以查看到当前集群的有一个新的用户角色devops,上面用到的Kubecm我们之前也分享过,如果需要可以点此跳转

权限验证

  1. > kubectl get pods 
  2. No resources found in architechure namespace. 
  3. > kubectl get replicasets 
  4. No resources found in architechure namespace. 
  5. > kubectl get deploy 
  6. No resources found in architechure namespace. 
  7. > kubectl get svc 
  8. Error from server (Forbidden): services is forbidden: User "devops" cannot list resource "services" in API group "" in the namespace "architechure" 

总结一下就是:

为devops用户增加指定命名空间的权限

我们先把当前上下文切换到之前有权限操作的user-tf26gt9mmk用户上

  1. kubecm switch 
  2. select dev 

否则以下步骤会出错:

首先需要创建针对指定命名空间的上下文

  1. kubectl config set-context devops-context --cluster=cluster-tf26gt9mmk --namespace=default --user=devops 

此时查询列举default空间下的pods是不行的,因为还没允许操作

  1. kubectl get pods --context=devops-context 
  2. Error from server (Forbidden): pods is forbidden: User "devops" cannot list resource "pods" in API group "" in the namespace "default" 

创建default空间下的role与rolebinding

devops-role-default.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1 
  2. kind: Role 
  3. metadata: 
  4.   name: devops-role 
  5.   namespace: default 
  6. rules: 
  7. - apiGroups: ["""extensions""apps"
  8.   resources: ["deployments""replicasets""pods"
  9.   verbs: ["get""list""watch""create""update""patch""delete"] # 也可以使用['*'

devops-rolebinding-default.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1 
  2. kind: RoleBinding 
  3. metadata: 
  4.   name: devops-rolebinding 
  5.   namespace: default 
  6. subjects: 
  7. - kind: User 
  8.   name: devops 
  9.   apiGroup: "" 
  10. roleRef: 
  11.   kind: Role 
  12.   name: devops-role 
  13.   apiGroup: "" 

然后我们在集群中创建这两个对象

  1. kubectl apply -f devops-role-default.yaml 
  2. kubectl apply -f devops-rolebinding-default.yaml 

查看role资源对象是否创建

  1. kubectl get role -A |grep devops-role # 分别在architechure和default命名空间下 
  2. architechure                   devops-role                                      2021-05-17T07:57:27Z 
  3. default                        devops-role                                      2021-05-28T03:19:24Z 

切换当前上下文环境,验证是否可以操作资源

  1. kubecm switch 
  2. select devops-context 
  3. kubectl get pods -n default 
  4. kubectl get pods -n architechure 

到这里就基本上说清楚如何创建一个用户、授权操作k8s集群的过程了。

 

来源:云原生生态圈内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯