dav*_*wil 17 posix kubernetes kubectl
我想在 shell 脚本中获取机密的特定字段的值。
从kubectl get secret文档来看,获取秘密的标准方法似乎以指定的格式返回整个事物,并使用 base64 编码的值。
所以,为了获得秘密的bar字段foo,输出为未编码的字符串,我这样做:
kubectl get secret foo -o json | jq -r ".data.bar" | base64 --decode
Run Code Online (Sandbox Code Playgroud)
那是
foo以 JSON 形式获取整个秘密jq读取bar字段的管道base64有没有办法只使用kubectl?
或者 POSIX 兼容 shell 中的一种优雅方式,它不依赖于任何依赖项,例如jq?
mch*_*wre 20
尝试这个
kubectl get secret foo --template={{.data.bar}} | base64 --decode
Run Code Online (Sandbox Code Playgroud)
不需要jq。
And*_*nov 15
如果键包含点:
apiVersion: v1
metadata:
name: foo
data:
bar.baz: RnVja2VkIFVwIEJleW9uZCBBbGwgUmVjb2duaXRpb24=
Run Code Online (Sandbox Code Playgroud)
语法是:
kubectl get secret foo -o jsonpath="{.data['bar\.baz']}" | base64 -d
Run Code Online (Sandbox Code Playgroud)
小智 11
kubectl get secret foo -o jsonpath={.data.bar} | base64 --decode
Run Code Online (Sandbox Code Playgroud)
https://kubernetes.io/docs/reference/kubectl/jsonpath/
小智 9
您可以尝试以下命令,它将解码密钥中的所有值。
kubectl get secret <secret-name> -o json | jq '.data | map_values(@base64d)'
Run Code Online (Sandbox Code Playgroud)
对于连字符键,以下是直接从 获取解码值的转义技巧kubectl:
kubectl get secret foo -o go-template='{{ index .data \"bar-baz\" | base64decode }}'
Run Code Online (Sandbox Code Playgroud)
(使用 kubectl 1.21.5 测试)