「Kubernetes」- 创建 TOKEN 凭证、管理集群、用户授权

  CREATED BY JENKINSBOT

问题描述

在初始化集群后,我们使用 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