创建客户端证书
1 2 3 4 5 6 7 8
| //这一步是生成客户端私钥 openssl genrsa -out client.key 2048
//根据私钥生成csr, /CN指定了用户名shenyi openssl req -new -key client.key -out client.csr -subj "/CN=test"
//根据k8s的CA证书生成我们用户的客户端证书 sudo openssl x509 -req -in client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt -days 365
|
用客户端证书去请求
1 2 3 4 5 6 7 8
| //查看下endpoint kubectl get endpoints
//其中 可以用 --insecure 代替 --cacert /etc/kubernetes/pki/ca.crt 从而忽略服务端证书验证 curl --cert ./client.crt --key ./client.key --cacert /etc/kubernetes/pki/ca.crt -s <https://192.168.0.53:6443/api>
//如果你忘了证书设置的CN(Common name)是啥 可以用下面的命令搞定 openssl x509 -noout -subject -in client.crt
|
把用户设置到config里面去
1 2 3 4
| kubectl config --kubeconfig=/home/test/.kube/config \\ set-credentials test --client-certificate=/home/test/ua/test/client.crt \\ --client-key=/home/test/ua/test/client.key
|
创建上下文
1
| kubectl config --kubeconfig=/home/test/.kube/config set-context user_context --cluster=kubernetes --user=test
|
指定上下文
1
| kubectl config --kubeconfig=/home/test/.kube/config use-context user_context
|
之后进行设置role 和roleBinding 或者是ClusterRole和ClusterRoleBinding
role只能管理单个namespace 如果要管理多个namespace就用ClusterRole
这样这个用户就可以按照权限来查看了