后台172.16.99.128是我的k8s集群的master节点。这是从这里获得的集群证书。创建访问架构命名空间的用户1.为用户devops创建私钥opensslgenrsa-outdevops.key20482。使用我们刚刚创建的私钥创建证书签名请求文件: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-altotal72drwxr-xr-x11marionstaff352Dec2511:32.drwxr-xr-x13marionstaff416Dec2511:26..-rw-r--r--1marionstaff17Dec2511:32.srl-rw-r--r--1marionstaff1156Dec2511:32-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.key4.现在我们可以使用刚刚创建的证书文件和私钥文件在集群中创建新的凭证:kubectlconfigset-credentialsdevops--client-certificate=devops.crt--client-key=devops.key5。通过刚刚创建的用户凭证创建一个新的上下文(Context)#如果你的电脑管理着多个集群,你的集群名称可能会改变,所以在集群名称下面的--cluster参数指定实际的,如下图kubectlconfigset-contextdevops-context--cluster=cluster-tf26gt9mmk--namespace=architechure--user=devops6。尝试通过这个用户操作命令?kubectlgetpods--context=devops-contextErrorfromserver(Forbidden):podsisforbidden:User"devops"cannotlistresource"pods"inAPIgroup""inthenamespace"architechure"#因为devops-context没有权限操作API7.为用户创建一个角色资源:[“deployments”,“replicasets”,“pods”]动词:[“get”,“list”,“watch”,“create”,“"update","patch","delete"]#也可以使用['*']然后在集群中创建角色kubectlapply-f./devops.role.yaml8.创建权限和角色的绑定关系devops-rolebinding.yamlapiVersion:rbac.authorization.k8s.io/v1kind:RoleBindingmetadata:name:devops-rolebindingnamespace:architechuresubjects:-kind:Username:devopsapiGroup:""roleRef:kind:Rolename:devops-role#devops在上一步中创建-roleentityapiGroup:""在集群kapply-f./devops-rolebinding.yaml9中创建角色与用户的绑定关系,此时我们可以通过kubecm切换到这个角色,此时可以从中查看下图当前集群多了一个新的用户角色devops,上面使用的kubecm我们已经分享过了,有需要的可以点这里跳转到10权限验证>kubectlgetpodsNoresourcesfoundinarchitechurenamespace.>kubectlgetreplicasetsNoresourcesfoundinarchitechurenamespace.>kubectlgetdeployNoresourcesfoundinarchitechurenamespace.>kubectlgetsvcErrorfrom:User"devops"cannotlistresource"services"inAPIgroup""inthenamespace"architechure"总结一下:根据集群的CA证书创建用户证书根据用户证书在集群中创建用户的凭证和上下文如果用户可以执行基本保持操作需要给apiGroup的用户授权给devops用户1增加指定namespace的权限,我们先把当前上下文切换到有权限操作的user-tf26gt9mmk用户,之前kubecmswitch#selectdev#selectdev否则如下步骤会出错:2.首先创建对于指定namespace的contextkubectlconfigset-contextdevops-context--cluster=cluster-tf26gt9mmk--namespace=default--user=devops这个时候是无法查询和查询的列出默认空间中的pod,因为kubectlgetpods--context的操作还不允许=devops-contextErrorfromserver(Forbidden):podsisforbidden:User"devops"cannotlistresource"pods"inAPIgroup""inthenamespace"default"3.创建角色和默认空间中的角色绑定[“部署”,“复制集”,“吊舱”]verbs:["get","list","watch","create","update","patch","delete"]#['*']devops-rolebinding-default.yamlapiVersion:rbac.authorization.k8s.io/v也可以使用1kind:RoleBindingmetadata:name:devops-rolebindingnamespace:defaultsubjects:-kind:Username:devopsapiGroup:""roleRef:kind:Rolename:devops-roleapiGroup:""然后我们在集群kubectlapply-fdevops-role-default中创建这两个对象。yamllkubectlapply-fdevops-rolebinding-default.yaml4。检查角色资源对象是否分别在架构和默认命名空间下创建kubectlgetrole-A|grepdevops-role#:19:24Z5。切换当前上下文,验证是否可以操作资源kubecmswitch#selectdevops-contextkubectlgetpods-ndefaultkubectlgetpods-narchitechure这里基本讲解了如何创建用户并授权操作k8s集群的过程
