替换下面的2个命令以获取Kubernetes机密的令牌的一个线性命令是什么?示例用例将从kubernetes-dashboard-admin的秘密中获取令牌以登录和查看kubernetes-dashboard。
命令示例:
$ kubectl describe serviceaccount default
Name: default
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: default-token-zvxf4
Tokens: default-token-zvxf4
Events: <none>
$ kubectl describe secret default-token-zvxf4
Name: default-token-zvxf4
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: 809835e7-2564-439f-82f3-14762688ca80
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 7 bytes
token: TOKENHERE
答案 0 :(得分:4)
我发现的答案在下面。通过使用jsonpath进行检索,并使用xargs将秘密名称/输出传递给第二个命令。最后需要使用base64解码加密的令牌。
$ kubectl get serviceaccount default -o=jsonpath='{.secrets[0].name}' | xargs kubectl get secret -ojsonpath='{.data.token}' | base64 --decode
TOKENHERE%
尾部%不是令牌的一部分
这应该可以在MacOS上运行,而无需安装其他应用程序,例如jq,该应用程序也可以这样做。希望这对其他人有帮助。
答案 1 :(得分:0)
通常不需要运行任何一个命令。 Kubernetes会将凭据自动安装到使用该服务帐户声明的Pod中的/var/run/secrets/kubernetes.io/serviceaccount/token
上,并且各种Kubernetes SDK都知道在那里查找凭据。 Kubernetes文档中的Accessing the API from a Pod更详细地描述了此设置。
Configure Service Accounts for Pods描述了可以进行的Pod级设置,尽管这些设置有合理的默认值。
apiVersion: v1
kind: Pod # or a pod spec embedded in a Deployment &c.
spec:
serviceAccountName: my-service-account # defaults to "default"
automountServiceAccountToken: true # defaults to true
我不会尝试以服务帐户的身份从集群外部发出请求。用户权限更适合此用例。作为用户,您可以根据需要启动具有服务帐户权限的Job。
答案 2 :(得分:0)
使用 kubectl describe
代替 kubectl get
并添加命名空间定义的示例:
kubectl -n kube-system describe secret $(kubectl -n kube-system describe sa default | grep 'Mountable secrets' | awk '{ print $3 }') | grep 'token:' | awk '{ print $2 }'