【发布时间】:2022-04-04 14:05:30
【问题描述】:
我想在 shell 脚本中获取密钥的特定字段的值。
从kubectl get secret 文档中,似乎获取秘密的标准方法会以指定格式返回整个内容,并使用 base64 编码的值。
所以,要获取foo 秘密的bar 字段,输出为未编码的字符串,我这样做:
kubectl get secret foo -o json | jq -r ".data.bar" | base64 --decode
那是
- 以 JSON 格式获取整个
foo秘密 - 管道到
jq以从JSON 中读取bar字段 - 使用
base64解码值
有没有办法只使用kubectl?
或者在符合 POSIX 标准的 shell 中不依赖任何依赖项(如 jq)的优雅方式?
【问题讨论】:
-
试试这个
kubectl get secret foo --template={{.data.bar}} | base64 --decode不需要jq -
我不知道使用 kubectl 的内部机制解码 base64 的任何方法,但是要从秘密中获取特定字段,您可以使用 jsonpath 输出:kubernetes.io/docs/reference/kubectl/jsonpath - 您可以管道/组合输出使用此处的一种方法,也可以避免 base64 命令依赖:stackoverflow.com/questions/47800145/…
-
您可以尝试使用 sed
kubectl get secret foo | sed 's/^.*bar: \(.*\).*$/\1/' | base64 -d -
这些都是非常有用的选项,谢谢!请将它们作为答案发布,以便我投票!
-
我认为@mchawre 没有比这更好的答案了,
标签: kubernetes posix kubectl