Kubernetes / kubectl 打印所有秘密
Kubernetes / kubectl print all secrets
我想使用 kubectl
打印出我的 Secrets 中的所有键值对。我不知道如何在一行中使用 -o --jsonpath
标志或通过管道输入 jq
来执行此操作。我当然可以编写一个脚本来执行此操作,但我觉得必须有更好的方法,因为在让您查看 Secrets 时,kubernetes GUI 非常简单和自由。[=19=]
假设我像这样创建秘密:
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
值。
获得所有键值对的干净列表的最简单方法是什么?在所有秘密中执行此操作的奖励积分(而不是像我在这里所做的那样只针对一个特定的秘密)。
足够新的 jq 版本有一个用于解码 base64 的过滤器,但它只能在编码的值是有效的 JSON 字符串时使用。
无论如何,您可以先尝试:
.data | map_values(@base64d)
如果您需要从 kubernetes 秘密中提取 tls 证书 and/or 密钥并且您有不支持的旧 jq 版本 map_values(@base64d):
kubectl get secrets tls-cert -o json | jq '.data' | cut -d '"' -f 4 | tr -d '{}' | base64 --decode
我读到这个问题是询问如何一次性解码所有秘密。我基于已接受的答案生成 one-liner 来执行此操作:
kubectl get secrets -o json | jq '.items[] | {name: .metadata.name,data: .data|map_values(@base64d)}'
这有一个额外的好处,即列出机密的名称以及解码值以提高可读性。
我想使用 kubectl
打印出我的 Secrets 中的所有键值对。我不知道如何在一行中使用 -o --jsonpath
标志或通过管道输入 jq
来执行此操作。我当然可以编写一个脚本来执行此操作,但我觉得必须有更好的方法,因为在让您查看 Secrets 时,kubernetes GUI 非常简单和自由。[=19=]
假设我像这样创建秘密:
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
值。
获得所有键值对的干净列表的最简单方法是什么?在所有秘密中执行此操作的奖励积分(而不是像我在这里所做的那样只针对一个特定的秘密)。
足够新的 jq 版本有一个用于解码 base64 的过滤器,但它只能在编码的值是有效的 JSON 字符串时使用。
无论如何,您可以先尝试:
.data | map_values(@base64d)
如果您需要从 kubernetes 秘密中提取 tls 证书 and/or 密钥并且您有不支持的旧 jq 版本 map_values(@base64d):
kubectl get secrets tls-cert -o json | jq '.data' | cut -d '"' -f 4 | tr -d '{}' | base64 --decode
我读到这个问题是询问如何一次性解码所有秘密。我基于已接受的答案生成 one-liner 来执行此操作:
kubectl get secrets -o json | jq '.items[] | {name: .metadata.name,data: .data|map_values(@base64d)}'
这有一个额外的好处,即列出机密的名称以及解码值以提高可读性。