普通用户: 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集群的安全性,分工明确