实践中理解Kubernetes RBAC之Role

网友投稿 671 2023-04-04

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

实践中理解Kubernetes RBAC之Role

背景

172.16.99.128是的我k8s集群的master节点,此处是从这里获取集群的证书。

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

1.给用户devops 创建一个私钥

openssl genrsa -out devops.key 2048

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

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

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

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

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

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

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

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

6.尝试通过该用户操作命令

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

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

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

然后在集群中创建该角色

kubectl apply -f ./devops.role.yaml

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

apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:   name: devops-rolebinding   namespace: architechure subjects: - kind: User   name: devops   apiGroup: "" roleRef:   kind: Role   name: devops-role # 上一步创建的devops-role实体   apiGroup: ""

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

k apply -f ./devops-rolebinding.yaml

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

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

10.权限验证

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

总结一下就是:

根据集群的CA证书创建出来用户证书根据用户证书创建该用户在集群内的凭证和上下文内容要想用户能进行基本的操作,需要对用户针对apiGroup授权

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

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

kubecm switch # select dev

否则以下步骤会出错:

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

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

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

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

3.创建default空间下的role与rolebinding

devops-role-default.yaml

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

devops-rolebinding-default.yaml

apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:   name: devops-rolebinding   namespace: default subjects: - kind: User   name: devops   apiGroup: "" roleRef:   kind: Role   name: devops-role   apiGroup: ""

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

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

4.查看role资源对象是否创建

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

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

kubecm switch # select devops-context kubectl get pods -n default kubectl get pods -n architechure

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

上一篇:Make 命令未找到?这是修复它的方法
下一篇:告警分析模块(告警分析模块是什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~