目標:devuser用戶只對namespace是dev下的資源有操做權限linux
1、基礎配置設置
一、首先useradd建立一個devuser用戶,並修改密碼:
使用devuser執行kubectl get pod命令不會成功,由於devuser如今對任何一個namespace下的資源都沒有權限
二、建立一個dev的namespace
2、k8s config 文件生成
一、建立用來生成密鑰的json文件
cat /k8s/cert/devuser.json
json
{ "CN": "devuser", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "ShenZhen", "L": "ShenZhen", "O": "k8s", "OU": "System" } ] }
二、獲取生成密鑰的命令文件:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
指定密鑰文件,生成密鑰(此步命令儘可能在/etc/kubernetes/pki路徑下執行,由於該路徑下自己就是存放k8s認證相關的文件)
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /k8s/cert/devuser.json | cfssljson -bare devuser
執行完成,已經有了devuser的密鑰文件api
聲明一下apiserver環境變量:
export KUBE_APISERVER="https://10.18.6.127:6443"
三、設置集羣參數:ide
[root@kb-master cert]# kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=devuser.kubeconfig
四、設置客戶端認證參數:spa
[root@kb-master cert]# kubectl config set-credentials devuser \ --client-certificate=/etc/kubernetes/pki/devuser.pem \ --client-key=/etc/kubernetes/pki/devuser-key.pem \ --embed-certs=true \ --kubeconfig=devuser.kubeconfig
五、設置上下文參數3d
[root@kb-master cert]# kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=devuser \ --namespace=dev \ --kubeconfig=devuser.kubeconfig
六、進行RoleBinding角色綁定code
kubectl create rolebinding devuser-admin-rolebinding(rolebinding的名字) --clusterrole=admin(clusterrole的名字,admin在k8s全部namespace下都有最高權限) --user=devuser(將admin的權限賦予devuser用戶) --namespace=dev(範圍是dev這個namespace下) 即devserver
七、將devuser.kubeconfig複製到/home/devuser/.kube目錄下blog
cp devuser.kubeconfig /home/devuser/.kube/config chown devuser.devuser devuser.kubeconfig
八、在dev用戶下切換上下文
再查看pod資源就不會報錯了,可是目前dev的namespace下沒有任何pod在運行
使用devuser建立deployment
使用root用戶查看pod信息,發現pod都是dev命名空間下的ssl
說明devuser的kubectl命令默認只在dev命名空間下生效,也只能在dev命名空間下有效
這在企業中對於權限的把控仍是頗有必要的