如何使用Powershell完成单个Kubernetes Secret的解码操作
故障原因
批量查询所有Secret时,kubectl get secrets -o json返回的JSON数据顶层包含items数组存储所有Secret资源;而查询单个指定Secret时,kubectl get secret <名称> -o json返回的JSON没有items字段,直接是单个Secret的资源结构。你修改后的命令还保留了select -ExpandProperty items步骤,找不到对应字段自然无法正常运行。
修正后的单Secret解码命令
删除多余的select -ExpandProperty items | ? data步骤,直接提取返回对象的data字段即可,完整命令如下:
kubectl get secret mysecretname -o json | ConvertFrom-Json | select -ExpandProperty data | % { $_.PSObject.Properties | % { $_.Name + [System.Environment]::NewLine + [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($_.Value)) + [System.Environment]::NewLine + [System.Environment]::NewLine } }
可选优化写法
可以把Secret名称提取为变量,修改时更方便,同时简化换行写法:
# 替换为你要解码的Secret名称 $targetSecret = "mysecretname" kubectl get secret $targetSecret -o json | ConvertFrom-Json | select -ExpandProperty data | % { $_.PSObject.Properties | % { $_.Name + "`n" + [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_.Value)) + "`n`n" } }
内容的提问来源于stack exchange,提问作者Richie
相关产品推荐
相关产品推荐

