创建 Kubernetes 仪表板令牌

Ala*_*orm 10 kubernetes kubectl kubernetes-dashboard

我尝试按照https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md上的说明创建 Kubernetes 仪表板令牌。但是,当我运行指定的命令时,出现错误

% kubectl -n kubernetes-dashboard create token admin-user
Error: must specify one of -f and -k

error: unknown command "token admin-user"
See 'kubectl create -h' for help and examples
Run Code Online (Sandbox Code Playgroud)

如果我跳回文档历史记录,我会看到一个可以运行的不同的、更详细的命令

% kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,文档更改的 PR 提到“版本 1.24”,但没有提到 1.24 版本指的是哪个软件(kubectl?仪表板?Kuberenetes 本身??kind还有其他东西吗?)

那么第一个命令发生了什么?为什么不起作用?

P..*_*... 9

这是 kubernetes 1.24 中的一项新功能,您的集群kubectl必须运行 <1.24 版本的 Kubernetes,从而导致出现此问题。请参阅下面的更改日志:

kubectl create token 现在可用于请求服务帐户令牌,并且请求服务帐户令牌的权限已添加到编辑和管理 RBAC 角色中(#107880,@liggitt)

显示更多相关信息的另一个片段:

Kubectl 的变化:

向 kubectl 添加命令以请求绑定的服务帐户令牌。这将有助于简化使用 kubectl get Secret "$(kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}')" 等命令抓取生成的服务帐户令牌的过渡

服务器和客户端都必须运行 1.24 或更高版本,如下所示:

kubectl version --output=json
{
  "clientVersion": {
    "major": "1",
    "minor": "24",
    "gitVersion": "v1.24.0",
    "gitCommit": "4ce5a8954017644c5420bae81d72b09b735c21f0",
    "gitTreeState": "clean",
    "buildDate": "2022-05-03T13:46:05Z",
    "goVersion": "go1.18.1",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "kustomizeVersion": "v4.5.4",
  "serverVersion": {
    "major": "1",
    "minor": "24",
    "gitVersion": "v1.24.2",
    "gitCommit": "f66044f4361b9f1f96f0053dd46cb7dce5e990a8",
    "gitTreeState": "clean",
    "buildDate": "2022-06-15T14:15:38Z",
    "goVersion": "go1.18.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
Run Code Online (Sandbox Code Playgroud)

检查此以获取更多信息:https ://github.com/kubernetes/kubernetes/pull/107880

  • 您可以运行“kubectl get node -owide”来查看集群中使用的版本。很可能您没有运行版本“1.24”并使用低于 1.24 的版本。 (2认同)

小智 9

如果您的版本低于1.24,请运行以下命令。

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
Run Code Online (Sandbox Code Playgroud)

这适用于我的情况。谢谢。

  • 在命令末尾添加 `echo` 可以更轻松地复制令牌: `kubectl -n kubernetes-dashboard get Secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0] ].name}") -o go-template="{{.data.token | base64decode}}"; 回声` (2认同)