k8s創建指定用戶只對指定namesapce下的資源有操作權限

目標:devuser用戶只對namespace是dev下的資源有操作權限

一、基礎配置設置
1、首先useradd創建一個devuser用戶,並修改密碼:
使用devuser執行kubectl get pod命令不會成功,因爲devuser現在對任何一個namespace下的資源都沒有權限
2、創建一個dev的namespace
k8s創建指定用戶只對指定namesapce下的資源有操作權限
二、k8s config 文件生成
1、創建用來生成密鑰的json文件
cat /k8s/cert/devuser.json
k8s創建指定用戶只對指定namesapce下的資源有操作權限

{
  "CN": "devuser",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
     "C": "CN",
     "ST": "ShenZhen",
     "L": "ShenZhen",
     "O": "k8s",
     "OU": "System"
    }
]
}

2、獲取生成密鑰的命令文件:
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
k8s創建指定用戶只對指定namesapce下的資源有操作權限
執行完成,已經有了devuser的密鑰文件

k8s創建指定用戶只對指定namesapce下的資源有操作權限
聲明一下apiserver環境變量:
export KUBE_APISERVER="https://10.18.6.127:6443"
3、設置集羣參數:

[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

k8s創建指定用戶只對指定namesapce下的資源有操作權限
4、設置客戶端認證參數:

[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

5、設置上下文參數

[root@kb-master cert]# kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=devuser \
--namespace=dev \
--kubeconfig=devuser.kubeconfig

6、進行RoleBinding角色綁定

kubectl create rolebinding devuser-admin-rolebinding(rolebinding的名字) --clusterrole=admin(clusterrole的名字,admin在k8s所有namespace下都有最高權限) --user=devuser(將admin的權限賦予devuser用戶) --namespace=dev(範圍是dev這個namespace下) 即dev

k8s創建指定用戶只對指定namesapce下的資源有操作權限
7、將devuser.kubeconfig複製到/home/devuser/.kube目錄下

cp devuser.kubeconfig  /home/devuser/.kube/config
chown devuser.devuser devuser.kubeconfig

8、在dev用戶下切換上下文
k8s創建指定用戶只對指定namesapce下的資源有操作權限
再查看pod資源就不會報錯了,但是目前dev的namespace下沒有任何pod在運行
k8s創建指定用戶只對指定namesapce下的資源有操作權限
使用devuser創建deployment
k8s創建指定用戶只對指定namesapce下的資源有操作權限
使用root用戶查看pod信息,發現pod都是dev命名空間下的

k8s創建指定用戶只對指定namesapce下的資源有操作權限
說明devuser的kubectl命令默認只在dev命名空間下生效,也只能在dev命名空間下有效

這在企業中對於權限的把控還是很有必要的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章