一个班轮命令来获取秘密名称和秘密令牌

时间:2020-06-13 13:39:29

标签: kubernetes kubectl jsonpath kubernetes-secrets kubernetes-dashboard

替换下面的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

3 个答案:

答案 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 }'