关于RBAC的概念我这里就不阐述了(能力有限说不明白)
role是权限的集合,定义了这个角色有什么权限。
binding 是关联这个权限集合,让你继承role权限。
k8s使用上经常犯的错误:
binding时没有指定用户,自定义的证书里面是写了用户的,去匹配k8s里面同名的用户去获取权限。
正确:
错误:
证书制作:
官网步骤如下:
1. 创建key
openssl genrsa -out server.key 2048
2. 创建 csr,指定用户(CN=用户名)这步很重要,用户名要与binding的subects里user一致。
openssl req -new -key server.key -out server.csr -subj "/CN=test"
3.使用k8s里面的ca证书进行签发证书,生成crt
openssl x509 -req -in server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out server.crt -days 10000
制作:config 文件
1. set-credentials。 使用自己制作的证书,--kubeconfigg 保存到新文件中,默认保存到 当前用户 /home/家目录/.kube/config
kubectl config --kubeconfig test set-credentials test --client-certificate=./server.crt --client-key=./server.key --embed-certs=true
2. set-cluster 添加 集群信息。 --certificate-authority 如果server 是使用https 的一定要添加上k8s 的证书。 不然报证书验证错误。
kubectl config --kubeconfig test set-cluster test --server=https://192.168.229.135:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
3. 定义上下文信息, user 须与 证书 CN 项 和 binding 的 --user 一致。
kubectl config --kubeconfig test set-context test --cluster=test --user=test
4. 定义默认使用哪一个上下文
kubectl config --kubeconfig test set-context --current --cluster=test
验证:
案例1 : clusterrolebinding cluster-admin 拥有管理员权限:
1. clusterrolebinding 管理员
kubectl create clusterrolebinding test --clusterrole=cluster-admin
案例2: rolebinding cluster-admin 绑定default 命名空间拥有最高管理权限。
kubectl create rolebinding test --clusterrole=cluster-admin --user=test -n default
扩展:
自定义role:
kubectl create role otherrole --verb=get,create,delete,watch --resource=deployment,statefulset,daemonset,pods
系统预设的clusterrole有:
view
edit
常用的 verb :
查看类
- get
- list
- watch
编辑类:
- create
- delete
- deletecollection
- patch
- update