关于您的问题,“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