【问题标题】:where are tokens created by kubectl create token stored (from v1.24 on)?kubectl create token 创建的令牌存储在哪里(从 v1.24 开始)?
【发布时间】:2022-10-21 23:35:32
【问题描述】:

这个问题涉及 kubernetes v1.24 及更高版本

所以我可以为服务帐户创建令牌

kubectl create token myserviceaccount

创建的令牌起作用并达到目的,但我感到困惑的是,当我 kubectl get sa myserviceaccount 的 SECRETS 字段仍然为 0 时。令牌也不会出现在 kubectl get secrets 中。

我还看到我可以将--bound-object-kind--bound-object-name 传递给kubectl create token,但这似乎也没有任何作用(可见)......

有没有办法查看创建的令牌? --bound.. 标志的目的是什么?

【问题讨论】:

  • 如果此答案或任何答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

标签: linux kubernetes token


【解决方案1】:

关于您的问题,“kubectl create token myserviceaccount”命令似乎与您期望的不同,因为根据官方文档,当您配置另一个 SA 时,会自动创建令牌并由服务帐户引用。

考虑到令牌控制器将清理不存在的服务帐户的任何令牌。

关于 SA 的配置,请查看link

如果您想了解有关服务帐户令牌中身份验证如何工作的更多信息,您可以咨询上下文,您可以咨询link

如果您设置了 Sa,您可以在 link 中查看如何管理它

要在加入集群的节点和控制平面节点之间建立双向信任,请咨询link

如果您想检查分配的令牌,您可以按照:

获取有关您的 Kubernetes 机密对象的信息。 Secrets 用于存储访问凭证:

kubectl get secret --namespace={namespace}  

输出:

    NAME                   TYPE                                  DATA          AGE                          
    admin.registrykey      kubernetes.io/dockercfg               1             1h                                       
    default-token-2mfqv    kubernetes.io/service-account-token   3             1h

获取服务帐户令牌的详细信息。

kubectl get secret default-token-2mfqv --namespace={namespace} -o yaml

以下是示例输出:

apiVersion: v1
data:
 ca.crt: S0tLS1CR...=
 namespace: ZGVmYXVsdA==
 token: ZXlKaGJHY...=
kind: Secret
metadata:
 annotations:
   kubernetes.io/service-account.name: default
   kubernetes.io/service-account.uid: df441c69-f4ba-11e6-8157-525400225b53
 creationTimestamp: 2017-02-17T02:43:33Z
 name: default-token-2mfqv
 namespace: default
 resourceVersion: "37"
 selfLink: /api/v1/namespaces/default/secrets/default-token-2mfqv
 uid: df5f1109-f4ba-11e6-8157-525400225b53
type: kubernetes.io/service-account-token

注意:示例输出中的令牌以 base64 编码。您必须解码令牌,然后使用 kubectl 设置此令牌。

解码并设置 base64 编码的令牌。

kubectl config set-credentials sa-user --token=$(kubectl get secret <secret_name> -o jsonpath={.data.token} | base64 -d)

kubectl config set-context sa-context --user=sa-user

在命令中,<secret_name> 键入您的服务帐户密钥的名称。 连接到 API 服务器。 curl -k -H "授权:持有者 {token}"

您现在可以使用 kubectl 访问您的集群,而没有令牌到期的时间限制。

最后,here 您可以阅读有关 –bound 标志的信息。

****考虑到1.24版本,这有变化****

一旦 Pod 使用 SA 运行,您可以检查:

手动生成 ServiceAccount 令牌

只需手动生成令牌以在管道中使用或在我们需要联系 K8s Apiserver 时使用:

kubectl create token cicd
kubectl create token cicd --duration=999999h

提示:您可以使用例如https://jwt.io 来检查令牌,但不要对生产令牌执行此操作!

为 ServiceAccount 创建 Secret 我们可以手动创建 Secret 并将其分配给 ServiceAccount:

apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: cicd
  annotations:
    kubernetes.io/service-account.name: "cicd"

如果您描述 Secret,我们还将看到为其生成了一个令牌:

kubectl describe secret cicd

一个很大的不同是,Service Account 不再像以前那样具有 Secret 部分:

kubectl get sa cicd -oyaml

要查找属于 ServiceAccount 的 Secret,我们需要搜索所有具有正确注释的 Secret。

删除服务帐户 如果我们删除 ServiceAccount,那么 Secret 也会被自动删除,就像以前的版本一样:

kubectl delete sa cicd
kubectl get sa,secret # all gone

您可以查看以下视频以获取reference

【讨论】:

  • 嗨@golder3 我分享的建议对你有用吗?
  • 令牌不是从 kubernetes 1.24 版自动创建的,因此我的问题...
  • 对不起,我错过了我编辑我的回答考虑到版本的信息,希望可以帮助你
【解决方案2】:

从 v1.24 开始,您必须手动创建令牌。

使用 TokenRequest API

这取决于用例,但管理这些令牌并不容易。它们是使用命令kubectl create 创建的,例如:

kubectl create token SERVICE_ACCOUNT_NAME

如果Service Account 在特定的namespace 中,则需要在命令上定义:

kubectl create token SERVICE_ACCOUNT_NAME -n NAMESPACE

您也可以定义过期时间:

kubectl create token SERVICE_ACCOUNT_NAME --duration 5h

参考:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-token-em-

与 Secret 关联的令牌

要创建与secret 对象关联的token,您可以将kubectl apply 与文件一起使用:

apiVersion: v1
kind: Secret
metadata:
  name: demo-token # the name of secret 
  annotations:
    kubernetes.io/service-account.name: "name_of_sa" # the name of the ServiceAccount
type: kubernetes.io/service-account-token

然后,只需执行:

kubectl apply -f file.yml

或者,如果 ServiceAccount 在特定的命名空间中

kubectl apply -f file.yml -n NAMESPACE

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2012-04-29
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多