用什么一行命令来替换下面的两个命令来获取Kubernetes secret的token?示例用例将从kubernetes-dashboard-admin的secret获取token以登录并查看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
4条答案
按热度按时间vwkv1x7d1#
我发现的答案在下面。通过使用jsonpath检索并使用xargs将秘密名称/输出传递给第二个命令。将需要在最后使用base64解码加密令牌。
这应该能够在MacOS上工作,而无需安装像jq这样的额外应用程序,它应该能够做到这一点。希望这对其他人有帮助。
8gsdolmq2#
您通常不需要运行这两个命令。Kubernetes会自动将凭证挂载到使用该服务帐户声明的pod中的
/var/run/secrets/kubernetes.io/serviceaccount/token
,并且各种Kubernetes SDK知道在那里查找凭证。Kubernetes文档中从Pod访问API更详细地描述了此设置。Configure Service Accounts for Pods描述了可以进行的Pod级设置,尽管这些设置有合理的默认值。
我不会尝试以服务帐户的身份从集群外部发出请求。用户权限更适合此用例。作为用户,如果需要,您可以使用服务帐户权限启动作业。
d6kp6zgx3#
使用
kubectl describe
代替kubectl get
并添加命名空间定义的示例:7fhtutme4#
假设只有一个secret存在,我们可以使用
jq
JSON parser/processor来获取这个secret的数据,然后使用base64 -d
来解码它(你可以在1行中完成,但是当单独提取secret name时,它会更自我注解):