k8s 集群限制普通用户只能有指定的命名空间操作的权限

普通用户: lucky                   指定命名空间: lucky-test

一:解决ssl认证

生成一个私钥

cd /etc/kubernetes/pki/
(umask 077; openssl genrsa -out lucky.key 2048)   #lucky.key 以用户名字为key文件名称

生成一个证书请求

openssl req -new -key lucky.key -out lucky.csr -subj "/CN=lucky" #lucky就是用户名字

生成一个证书

openssl x509 -req -in lucky.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out lucky.crt -days 3650

二: 将用户加入到集群里面
把lucky这个用户添加到kubernetes集群中,可以用来认证apiserver的连接

kubectl config set-credentials lucky --client-certificate=./lucky.crt --client-key=./lucky.key --embed-certs=true  
kubectl config view 查看一下确实已经有了lucky这个用户

在kubeconfig下新增加一个lucky这个账号
kubectl config set-context lucky@kubernetes --cluster=kubernetes --user=lucky

kubectl config view 查看一下context

三: 角色绑定 rolebinding

3.1  创建一个名称空间 test

kubectl  create  ns  lucky-test      创建namespace

kubectl  get    ns   lucky-test        查看namespace

3.2  创建一个rolebinding

kubectl create rolebinding lucky -n lucky-test --clusterrole=cluster-admin --user=lucky   #只允许lucky用户对lucky-test名称空间做操作

3.3 将context切换到lucky 测试一下是不是只有lucky-test命名空间的权限

kubectl config use-context lucky@kubernetes

kubectl get pod     #显示错误,因为默认查看的是default命名空间下的pod

kubectl get pod  -n lucky-test    #成功

注: No resources found in lucky-test namespace. 这个是正确的返回,因为lucky-test下面没有pod

四: 创建普通用户

useradd lucky

cp -ar /root/.kube   /tmp/    #将config文件先拷贝出来一份进行修改一下

修改/tmp/.kube/config文件,把kubernetes-admin相关的删除,只留lucky用户

current-context部分修改成lucky@kubernetes

users 只留lucky

修改完之后  拷贝到lucky用户目录

cp -ar /tmp/.kube/ /home/lucky/

修改属主

chown -R test.test /home/lucky/

测试

su - lucky

可以看到之后lucky-test这个命名空间的权限,其他空间没有

再创建pod测试一下

vim  pod.yaml

首先指定namespace部分为default命名空间

kubectl apply -f  pod.yaml

可以看到确实是创建不出来,再重新把namespace部分修改成lucky-test命名空间试一下

kubectl apply -f  pod.yaml

成功创建出来了,查看一下

kubectl  get  pod -n lucky-test

kubectl describe  pod   -n lucky-test      #查看pod详细信息

---

可以看到lucky 这个普通用户的权限仅限于lucky-test这个命名空间。

这种方法很有效的提高的k8s集群的安全性,分工明确

猜你喜欢

转载自blog.csdn.net/weixin_63294004/article/details/142590421