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方式打开作为借鉴。