配置普通linux平台用户访问k8s集群

生产环境对于业务的稳定性要求是相当高的,为了防止误操作,通常是通过不同的账号与权限来进行限制的。对于k8s集群而言,部署的时候通常是以linux root用户的身份进行部署的,k8s的安全机制是,认证、鉴权、准入控制;意味着除root用户外,其他普通用户不具备请求k8s集群资源的权限。普通用户访问k8s资源需要做认证与授权操作。

认证:

1、查看

认证之前首先查看普通用户(自定义的普通用户zs)访问k8s集群报什么错

[root@master01 ~]# su - zs

[zs@master01 ~]$ kubectl get  nodes

报错提示:连接到本机8080端口的服务被拒绝了,是否指明了正确的主机或者端口。即不能与apiserver交互。

2、创建证书(切回root用户)

[root@master01 ~]# cd /etc/kubernetes/pki/       

[root@master01 pki]# openssl genrsa -out zs.key 2048  

[root@master01 pki]# openssl req -new -key zs.key -out zs.csr -subj "/CN=zs/O=zs"

[root@master01 pki]# openssl x509 -req -in zs.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out zs.crt -days 3650

3、查看、设置集群、用户、上下文信息

查看集群信息、因为我之前做高可用,所以监听的端口是16443而不是6443,正常情况下默认是6443。

[zs@master01 ~]$ kubectl  cluster-info

设置名为kubernetes集群

[root@master01 pki]# kubectl  config  set-cluster  kubernetes --embed-certs=true  --certificate-authority=/etc/kubernetes/pki/ca.crt  --server=https://192.168.11.200:16443

设置用户

[root@master01 pki]# kubectl  config  set-credentials  zs --embed-certs=true --client-certificate=/etc/kubernetes/pki/zs.crt  --client-key=/etc/kubernetes/pki/zs.key

设置上下文信息

[root@master01 pki]# kubectl  config  set-context  zs@kubernetes  --cluster=kubernetes  --user=zs

4、拷贝证书文件即集群文件至普通用户家目录,并更改归属关系

[root@master01 pki]# mkdir /home/zs/.kube

[root@master01 pki]# cp zs.key zs.crt  zs.csr  /home/zs/

[root@master01 pki]# cp /root/.kube/config  /home/zs/.kube/

[root@master01 pki]# chown -R zs:zs /home/zs/

此时认证已经完成,但是认证完成并不代表你有任何权限访问集群资源

授权

授权即创建角色,并将角色与对象绑定

1、创建Clusterrole与Clusterrolebinding,即用户与权限绑定实现用户对资源的请求操作

[root@master01 test]# kubectl  apply  -f  zs.clusterrrole.clusterrolebind.yml

[root@master01 test]# cat zs.clusterrole.clusterrolebind.yml

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

  name: zsclusterrole

rules:

- apiGroups: ["*"] # "" 表示所有api组

  resources: ["*"] #*表示所有资源

  verbs: ["list","watch","get"]  

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: zsclusterrolebinding

subjects:

# 你可以指定不止一个“subject(主体)”

- kind: User

  name: zs # "name" 是区分大小写的

  apiGroup: rbac.authorization.k8s.io

roleRef:

  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系

  kind: ClusterRole        # 此字段必须是 Role 或 ClusterRole

  name: zsclusterrole  # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配

  apiGroup: rbac.authorization.k8s.io

此时已经完成角色创建及绑定,即可以访问哪些资源,对哪些资源有什么操作权限。

2、验证操作

切换到zs用户,查看当前所处的上下文,并非zs用户的,切换到zs用户的上下文

[root@master01 ~]# su - zs

[zs@master01 ~]$ kubectl  config  get-contexts

[zs@master01 ~]$ kubectl  config  use-context  zs@kubernetes

配置普通linux平台用户访问k8s集群_第1张图片

验证鉴权操作,因为上面设置的权限是对所有资源有查看权限,这里使用删除作为验证。集群中有一个我自定义的deployment与service

[zs@master01 ~]$ kubectl  get  svc,deployment

配置普通linux平台用户访问k8s集群_第2张图片

[zs@master01 ~]$ kubectl  delete  deployments.apps  nginx-deployment

[zs@master01 ~]$ kubectl  delete  svc define

配置普通linux平台用户访问k8s集群_第3张图片

最终,发现所有资源都可以看,因为上面设置的权限是看,但是不能删除。权限即角色的创建与修改可以根据需要自行查看。

你可能感兴趣的:(kubernetes,linux,运维)