k8s中用戶與用戶組
在k8s中也有用戶和組的概念,只是不如openshift那么清晰與好操作。但是原理基本上可以套用,畢竟openshift可以看作是k8s的封裝發行版,可參考Openshift用戶與權限思維導圖。
新建用戶
新建一個k8s用戶大概可以分為以下幾步:
- 生成用戶的證書key
- 通過用戶的證書key,生成用戶的證書請求
- 通過k8s的api的ca證書去簽發用戶的證書請求,生成用戶的證書
- 配置kubectl config
- kubectl config set-cluster //集群配置
- kubectl config set-credentials NAME //用戶配置
- kubectl config set-context //context配置
- kubectl config use-context //切換context
具體操作:
# (umask 077; openssl genrsa -out baison.key 2048) //創建用戶證書key # openssl req -new -key baison.key -out baison.csr -subj "/O=Baison/CN=baison" //創建用戶證書請求,-subj指定組和用戶,其中O是組名,CN是用戶名 # openssl x509 -req -in baison.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out baison.crt -days 3650 //使用k8s的ca簽發用戶證書 # kubectl config set-credentials baison --client-certificate=baison.crt --client-key=baison.key --embed-certs=true //用戶配置 # kubectl config set-context baison@kubernetes --cluster=kubernetes --user=baison //context設置 # 可以切換到新用戶了,但此時用戶啥權限都沒有 # kubectl config use-context baison@kubernetes
簡單說明:
- 沒有使用kubectl config set-cluster ,因為集群就使用本身的集群,也默認使用本集群的默認config文件
- kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE ---kubeconfig=/PATH/TO/SOMEFILE用於創建新的配置文件,如果不加此選項,則內容會添加到家目錄下.kube/config文件中,可以使用use-context來切換不同的用戶管理k8s集群
- context,就是用什么用戶來管理哪個集群,即用戶和集群的結合
用戶授權
k8s的用戶授權有很多種,其中最普遍的是RBAC——基於角色的授權機制。
- 某個用戶屬於某個角色
- 某個角色擁有某些操作
- 某些操作綁定到某些資源上
即最終效果是:某個用戶對某些資源擁有某些操作。下面以上面創建的baison用戶為例,讓此用戶對default空間擁有查看pod與進入到pod里的權限。
# kubectl create role only-read-pods --verb=get,list,watch,create --resource=pod,pod/exec
# kubectl create rolebinding bind-only-read-pods --role=only-read-pods --user=baison
簡單說明:
- 除了role、rolebinding外,還有cluserrole、clusterrolebinding,他們的區別就是作用域不同,很明顯帶cluser的作用與整個集群。
- rolebinding可以綁定role,也可以綁定clusterrole,綁定cluserrole的時候,clusterrole作用域降級為namespace級別。
- 集群有很多內置role、rolebinding和cluserrole、clusterrolebinding,可以用yaml方式打開作為借鑒。