K8S权限管理-普通用户

普通用户的信息无法通过 API 调用添加到集群中。Kubernetes 能够提供由集群的证书 机构签名的合法证书的用户是通过身份认证的用户。基于这样的配置,Kubernetes 使用证书中的 'subject' 的通用名称(Common Name)字段(例如,"/CN=bob")来 确定用户名。接下来,基于角色访问控制(RBAC)子系统会确定用户是否有权针对 某资源执行特定的操作。

1、创建证书

1.1、k8s证书和私钥:

kubeasz安装的k8s集群:

          kubernetes-ca的私钥和公钥:ca.pem和ca-key.pem

           管理服务器上/etc/kubeasz/clusters/myland-01/ssl/  ca.pem和ca-key.pem #myland-01为k8s集群名称

           master节点:在/etc/kubernetes/ssl/下 

kubeadm安装的k8s集群:

          私钥和公钥:ca.key和ca.crt

          位置: master节点:在/etc/kubernetes/pki/ 下 

 

1.2、新建文件夹用于工作目录,为了输入简单也可以把上述ca.pem和ca-key.pem也复制到这个文件夹

mkdir pki

cd pki

cp /etc/kubeasz/clusters/myland-01/ssl/ca.pem ./

cp /etc/kubeasz/clusters/myland-01/ssl/ca-key.pem ./ 

1.3、创建用户的私钥(如:user1)

 (umask 077;openssl genrsa -out user1.key 2048) 

1.4、创建证书签署请求

 openssl req -new -key user1.key -out user1.csr -subj "/O=myland-01 /CN=user1" 

O:组织名 CN:用户名

1.5、签署证书

 openssl x509 -req -in user1.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out user1.crt -days 365 

2、创建配置文件

2.1、集群配置

kubectl config set-cluster myland-01 --server=https://10.0.8.101:6443 \

--certificate-authority=ca.pem \

--embed-certs=true \

--kubeconfig=/data/project/pki/user1.conf 

2.2、用户配置

kubectl config set-credentials user1 \

--client-certificate=/data/project/pki/user1.crt \

--client-key=user1.key \

--embed-certs=true \

--kubeconfig=/data/project/pki/user1.conf 

2.3、创建context

kubectl config set-context user1@myland-01 \

--cluster=myland-01 \

--user=user1 \

--kubeconfig=/data/project/pki/user1.conf 

查看该kubeconfig信息

2.4、切换context

  kubectl config use-context user1@myland-01 --kubeconfig=/data/project/pki/user1.conf 

 3、绑定角色

上述操作完成后,用户还没有具体的访问权限,创建Role和RoleBinding,为该用户授权

只有test名称空间的相关权限

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: test
  name: pods-reader    
rules: 
- apiGroups: [""] 
  resources: ["pods","services","pods/*"]  
  verbs: ["get","watch","list","create"] 
/role-pod-reader.yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: user1
  namespace: test
subjects:
- kind: User
  name: user1
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pods-reader
  apiGroup: rbac.authorization.k8s.io
role-binding-user1.yaml

4、验证

kubectl --kubeconfig /data/project/pki/user1.conf get pods -n test 

 

posted @ 2022-01-15 15:34  西风发财  阅读(1385)  评论(0编辑  收藏  举报