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名称空间的相关权限
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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"]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
4、验证
kubectl --kubeconfig /data/project/pki/user1.conf get pods -n test