问题描述
在初始化集群后,我们使用 kubectl 命令能够控制整个集群,这是因为 ~/.kube/config 的凭证权限足够高;
但官方并不建议直接分发该凭证,应该创建新凭证并限制访问权限。比如,某些用户仅能访问和控制特定明明空间的资源;在访问 Dashboard 界面时,因该使用受限的 TOKEN 凭证;
该笔记将记录:在 Kubernetes 中,如何创建 TOKEN 来授权管理集群、管理特定命名空间等等操作,以及相关问题处理方法;
解决方案
第一步、创建 Admin Token(以管理整个集群)
kubectl create serviceaccount "cluster-admin-4ci" -n kube-system kubectl create clusterrolebinding "cluster-admin-4ci" \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:cluster-admin-4ci # secret=$(kubectl get -n kube-system serviceaccounts "k8sadmin-foo" -o jsonpath='{.secrets[0].name}') # kubectl get -n kube-system secrets $secret -o jsonpath='{.data.token}' | base64 -d eyJhbGciOiJSUzI1Ni...
第二步、在 kubectl 中,增加配置
我们需要在 .kube/config 中配置该 TOKEN(参考 Configure Access to Multiple Clusters 笔记),以使用 kubectl 管理集群;
view-serviceaccount-kubeconfig
GitHub/superbrothers/kubectl-view-serviceaccount-kubeconfig-plugin
通过该插件,能够使用特定 ServiceAccount 直接生成 kubeconfig 文件;
插件安装:
// 安装 krew 插件 // https://krew.sigs.k8s.io/ ... // 安装 view-serviceaccount-kubeconfig 插件 # kubectl krew install view-serviceaccount-kubeconfig Updated the local copy of plugin index. ...
使用插件:
kubectl create serviceaccount "cluster-admin-4ci" -n kube-system kubectl create clusterrolebinding "cluster-admin-4ci" \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:cluster-admin-4ci kubectl view-serviceaccount-kubeconfig -n kube-system cluster-admin-4ci
参考文献
docker – How to get the admin-user token from kubectl – Super User
How To Create Admin User to Access Kubernetes Dashboard | ComputingForGeeks