admin

实践中理解Kubernetes RBAC之Role

admin 运维技术 2022-11-13 429浏览 0

实践中理解Kubernetes RBAC之Role

背景

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

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

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

opensslgenrsa-outdevops.key2048

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

opensslreq-new-keydevops.key-outdevops.csr-subj"/CN=devops/O=architechure"

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

scproot@172.16.99.128:/etc/kubernetes/pki/ca.crt.
scproot@172.16.99.128:/etc/kubernetes/pki/ca.key.
opensslx509-req-indevops.csr-CA./ca.crt-CAkey./ca.key-CAcreateserial-outdevops.crt-days500
➜ls-al
total72
drwxr-xr-x11marionstaff352Dec2511:32.
drwxr-xr-x13marionstaff416Dec2511:26..
-rw-r--r--1marionstaff17Dec2511:32.srl
-rw-r--r--1marionstaff1156Dec2511:32README.md
-rw-r--r--1marionstaff1025Dec2511:30ca.crt
-rw-------1marionstaff1675Dec2511:30ca.key
-rw-r--r--1marionstaff1009Dec2511:32devops.crt
-rw-r--r--1marionstaff924Dec2511:30devops.csr
-rw-r--r--1marionstaff1679Dec2511:27devops.key

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

kubectlconfigset-credentialsdevops--client-certificate=devops.crt--client-key=devops.key

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

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

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

➜kubectlgetpods--context=devops-context
Errorfromserver(Forbidden):podsisforbidden:User"devops"cannotlistresource"pods"inAPIgroup""inthenamespace"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"]#也可以使用['*']

然后在集群中创建该角色

kubectlapply-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:""

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

kapply-f./devops-rolebinding.yaml

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

实践中理解Kubernetes RBAC之Role

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

实践中理解Kubernetes RBAC之Role

10.权限验证

>kubectlgetpods
Noresourcesfoundinarchitechurenamespace.
>kubectlgetreplicasets
Noresourcesfoundinarchitechurenamespace.
>kubectlgetdeploy
Noresourcesfoundinarchitechurenamespace.
>kubectlgetsvc
Errorfromserver(Forbidden):servicesisforbidden:User"devops"cannotlistresource"services"inAPIgroup""inthenamespace"architechure"

总结一下就是:

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

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

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

kubecmswitch
#selectdev

否则以下步骤会出错:

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

kubectlconfigset-contextdevops-context--cluster=cluster-tf26gt9mmk--namespace=default--user=devops

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

kubectlgetpods--context=devops-context
Errorfromserver(Forbidden):podsisforbidden:User"devops"cannotlistresource"pods"inAPIgroup""inthenamespace"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:""

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

kubectlapply-fdevops-role-default.yaml
kubectlapply-fdevops-rolebinding-default.yaml

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

kubectlgetrole-A|grepdevops-role#分别在architechure和default命名空间下
architechuredevops-role2021-05-17T07:57:27Z
defaultdevops-role2021-05-28T03:19:24Z

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

kubecmswitch
#selectdevops-context
kubectlgetpods-ndefault
kubectlgetpods-narchitechure

实践中理解Kubernetes RBAC之Role

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

继续浏览有关 系统运维 的文章
发表评论