我想使用kubectl
打印出我的秘密中的所有键值对。我无法弄清楚如何在-o --jsonpath
标志的一行中或通过管道jq
来做到这一点。我当然可以创建一个脚本来执行此操作,但我觉得必须有更好的方法,因为kubernetes GUI在让您查看Secrets方面非常简单和自由。
说我像这样创造秘密:
kubectl create secret generic testsecret --from-literal=key1=val1 --from-literal=key2=val2
现在我可以运行kubectl get secret testsecret -o json
来获得类似的内容:
{
"apiVersion": "v1",
"data": {
"key1": "dmFsMQ==",
"key2": "dmFsMg=="
},
...
}
我可以做类似
的事情 kubectl get secret testsecret -o jsonpath='{.data}'
或
kubectl get secret testsecret -o json | jq '.data'
以非列表格式获取我的键值对,然后我必须base64 --decode
这些值。
获取所有键值对的干净列表的最简单方法是什么?在所有秘密中实现这一点的加分(而不是像我在这里所做的那样只有一个特定的秘密)。
答案 0 :(得分:4)
jq的最新版本有一个用于解码base64的过滤器,但只有在编码的值是有效的JSON字符串时才能使用它。
无论如何,你可以先尝试:
.data | map_values(@base64d)
答案 1 :(得分:0)
如果您需要从 kubernetes 密钥中提取 tls 证书和/或密钥,并且您有一个不支持 map_values(@base64d) 的旧 jq 版本:
kubectl get secrets tls-cert -o json | jq '.data' | cut -d '"' -f 4 | tr -d '{}' | base64 --decode