s g*_*s g 3 base64 jsonpath jq kubernetes 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=="
},
...
}
Run Code Online (Sandbox Code Playgroud)
我可以做类似的事情
kubectl get secret testsecret -o jsonpath='{.data}'
要么
kubectl get secret testsecret -o json | jq '.data'
要以非列表格式获取键值对,则必须base64 --decode输入值。
清除所有键值对的最简单方法是什么?在所有机密上执行此操作的加分点(而不是像我在这里所做的那样仅针对一个特定的)。
sar*_*ole 19
我把这个问题理解为询问如何一次性解码所有秘密。我在公认的答案的基础上制作了一句台词来做到这一点:
kubectl get secrets -o json | jq '.items[] | {name: .metadata.name,data: .data|map_values(@base64d)}'
Run Code Online (Sandbox Code Playgroud)
这样做的另一个好处是列出秘密的名称以及解码后的值以提高可读性。
足够新近的jq版本具有用于解码base64的过滤器,但是仅当编码的值是有效的JSON字符串时才可以使用它。
无论如何,您可以先尝试:
.data | map_values(@base64d)
Run Code Online (Sandbox Code Playgroud)
小智 5
当使用接受的答案时,您可能会遇到异常
jq: error (at <stdin>:96): Cannot iterate over null (null)
Run Code Online (Sandbox Code Playgroud)
这可能是因为某些 json 可能未完全形成,请使用额外的过滤器
kubectl get secrets -o json | jq '.items[] | select(null != .data) | {name: .metadata.name,data: .data|map_values(@base64d)}'
Run Code Online (Sandbox Code Playgroud)
以上将确保产生预期结果
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |