用户登录
用户注册

分享至

如何创建一个用户、授权操作k8s集群的过程?

  • 作者: 朕来也众卿快退开
  • 来源: 51数据库
  • 2022-09-20
导读 本篇带给大家如何创建一个用户、授权操作**s集群的过程。希望对你有所帮助!
背景

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)
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.**s.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.**s.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.**s.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.**s.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

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

软件
前端设计
程序设计
Java相关