Kubernetes / kubectl打印所有秘密

时间:2018-05-11 06:13:05

标签: kubernetes base64 jq jsonpath kubectl

我想使用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这些值。

获取所有键值对的干净列表的最简单方法是什么?在所有秘密中实现这一点的加分(而不是像我在这里所做的那样只有一个特定的秘密)。

2 个答案:

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