选择系统namespace kube-system以及其它任意的namespace,任何资源都看不到,除了dev这个namespace:
删除这个pod试试看(提示无权删除):
OK,编辑功能什么的都可以试一试,全部用不了,只有查看的权利,主要是因为前面的角色 role-sa 给的权限都是verbs: ["get", "watch", "list"]嘛,这样就完成了一个精细化的权限分配操作:指定的sa限定在一个指定的namespace里获取指定的资源(本例是指定的namespace里只有查看pod,deployment等个别资源的权限)。
小结:
那么,sa由于是给服务使用的,本例中是给dashboard使用的,这就造成了管理方面的局限性,总是要登录dashboard或者其它能够使用token的场景,sa的权限才会生效。那么,有没有给人使用的权限精细化分配方案呢?答案是必须有,通过kubeconfig文件就可以实现精准的权限管理啦,命令行和图形化界面都可以使用非常的方便哦。
三,通过系统配置文件kubeconfig文件实现权限的精细化分配:
本次案例使用的集群为kubernetes二进制安装教程单master_zsk_john的博客-CSDN博客, 也就是集群的基本信息是:
token是前面的sa-dev这个sa里面的secrets,通过这个命令查询出来的:
kubectl -n dev describe secret $(kubectl get secret -n dev | grep sa-dev | awk '{print $1}')
kubeconfig文件生成前先把变量激活哦,这个不要忘记了:
KUBE_APISERVER="https://192.168.217.16:6443" TOKEN="eyJhbGciOiJSUzI1NiIsImtpZCI6IkxNRk93NFRwc3l5UlJjcG05V1IwY25rWjNGOWM1Z05OQjVXN1ROa004R1UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoic2EtZGV2LXRva2VuLThja2JkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InNhLWRldiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijc5NTNkMjgwLTdiMWEtNGJhNi1hMGE0LWU3MDVlMWNjOTU1MCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZXY6c2EtZGV2In0.tGQMxNX-zbAAltH-GkgvDKhBm7VjvNDWwE77NLyD1naqsF8pMfd9_4MlSv9dHVe8KlRTaqH7AHVKvQnwuy68TKbFj-0Zzx7O5P7DI4Q7bmc2p_jwNxjX0RSARiTmk6pAaMN9tffH7FcwsmBKTDBKX7_X7e3MOrDeBsPLgqkFYAQk_bAld0Smv-HbYDuAw3WzdYsnOLmmW1ceUdZycPvHHmbccnhZUWFnjEx0lxdWBksmHJI60W1xAJNSv-EoKTz1klVaQgpCzJrXhv_MENPUeJgxPCS9o6nhoVG13s5gISf8aK7hHi9ccvtyWDsgFw7Od0Vd3x3IiK7o2IpPTormug"
(1)集群的ca证书生成
[root@master k8s-ssl]# cat ca-config.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }
[root@master k8s-ssl]# cat ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "ST": "Beijing","O": "k8s", "OU": "System" } ] }
生成ca证书,证书生成后存放到任意目录下,例如/mnt:
1. cfssl gencert -initca ca-csr.json | cfssljson -bare ca - 2. cp ca.pem /mnt/
建立用户命令(这几个步骤是息息相关的,注意理解):
config文件引入集群ca证书,这里的set-cluster 可以任意设置,想叫什么集群名字都可以,我这里定义为mykubernetes,kubeconfig文件名称也随意定义,我这里定义为test.kubeconfig,此命令执行后会在当前目录生成test.kubeconfig这个文件:
kubectl config set-cluster mykubernetes \ --certificate-authority=/mnt/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=test.kubeconfig
定义的用户名称是test,当然,用户名称可以随意定义。里面的token就已经带了前面建立的sa的权限---查看dev这个namespace下的pod的权限:
kubectl config set-credentials "test" \ --token=${TOKEN} \ --kubeconfig=test.kubeconfig
定义上下文的名称,这个也是随便定义,我就用了拼音权限分配,cluster 就是前面定义的集群名称 ,用户名称也是前面定义的,这个不能乱写哦,要匹配。
kubectl config set-context quanxianfenpei \ --cluster=mykubernetes \ --user=test \ --kubeconfig=test.kubeconfig
切换上下文,其实这一步就是将ca证书和token关联起来并写在了这个新定义的kubeconfig文件内。
1. kubectl config use-context quanxianfenpei \ 2. --kubeconfig=test.kubeconfig
OK,这样我们就完成了使用kubeconfig配置精细化权限的流程,下面进入单元测试环节。
单元测试:
(1)将test.kubeconfig这个文件拷贝到浏览器所在环境内,dashboard登录的时候选择此文件,成功登录dashboard,并且功能和上面的单元测试结果一致。
(2)使用kubectl config 命令行测试:
可以查看pod,不能编辑删除pod
[root@master cfg]# k --kubeconfig=/root/kubeconfig/test.kubeconfig get po [root@master cfg]# k --kubeconfig=/root/kubeconfig/test.kubeconfig delete pod nginx-f89759699-cbnw6