RBAC基于角色的访问控制--全拼Role-Based Access Control
创建k8s账号与RBAC授权使用
1、创建私钥
(umask 077; openssl genrsa -out soso.key 2048)
用此私钥创建一个csr(证书签名请求)文件
openssl req -new -key soso.key -out soso.csr -subj "/CN=soso"
拿着私钥和请求文件生成证书
openssl x509 -req -in soso.csr -CA /opt/kubernetes/ssl/ca.pem -CAkey /opt/kubernetes/ssl/ca-key.pem -CAcreateserial -out soso.crt -days 365
2、查看证书内容
openssl x509 -in soso.crt -text -noout
生成账号
kubectl config set-credentials soso --client-certificate=soso.crt --client-key=soso.key --embed-certs=true
3、设置上下文环境--指的是这个账号只能在这个环境中才能用
kubectl config set-context soso@kubernetes --cluster=kubernetes --user=soso
查看当前的工作上下文
kubectl config view
4、切换用户(切换上下文)
kubectl config use-context soso@kubernetes
验证是否已经切换到了新的上下文
kubectl config current-context
5.测试(还未赋予权限)
kubectl get pod
Error from server (Forbidden): pods is forbidden: User "soso" cannot list resource "pods" in API group "" in the namespace "default"
创建一个角色(role)---权限
1.先切回管理帐号
kubectl config use-context kubernetes-admin@kubernetes
kubectl config use-context default@kubernetes
创建角色:
kubectl create role sosorole --verb=get,list,watch --resource=pod,svc
2.绑定用户soso(上面创建的用户),绑定role为sosorole
kubectl create rolebinding sosorole-binding --role=sosorole --user=soso
3.切换用户
kubectl config use-context soso@kubernetes
6.删除soso账号之前绑定的rolebinding
kubectl delete rolebinding sosorole-binding
7.创建clusterrole #可以访问全部的namespace
kubectl create clusterrole sosoclusterrole --verb=get,list,watch --resource=pod,svc
8.绑定集群角色到用户soso
kubectl create clusterrolebinding soso-rolebinding --clusterrole=sosoclusterrole --user=soso
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://10.115.92.43:6443 \
--kubeconfig=soso.kubeconfig
#设置客户端认证
kubectl config set-credentials soso \
--client-key=soso.key \
--client-certificate=soso.crt \
--embed-certs=true \
--kubeconfig=soso.kubeconfig
#设置默认上下文
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=soso \
--kubeconfig=soso.kubeconfig
#设置当前使用配置
kubectl config use-context kubernetes --kubeconfig=soso.kubeconfig