kubectl:从明文形式的秘密中获取特定值
kubectl: get specific value from a secret in plaintext
我想在 shell 脚本中获取机密的特定字段的值。
从 kubectl get secret
文档来看,这似乎是获取秘密的标准方法 returns 整个事情,以指定格式,值 base64 编码。
因此,要获取 foo
秘密的 bar
字段,输出为未编码的字符串,我正在这样做:
kubectl get secret foo -o json | jq -r ".data.bar" | base64 --decode
也就是
- 获取整个
foo
秘密作为 JSON
- 管道到
jq
以从 JSON 读取 bar
字段
- 使用
base64
解码值
有没有办法仅使用 kubectl
来做到这一点?
或者在 POSIX-compliant shell 中不依赖任何依赖项的优雅方式 jq
?
试试这个
kubectl get secret foo --template={{.data.bar}} | base64 --decode
不需要jq。
从 Kubernetes 1.11 开始这应该可以工作(参见 PR 60755):
kubectl get secret foo -o go-template='{{ .data.bar | base64decode }}'
kubectl get secret foo -o jsonpath={.data.bar} | base64 --decode
如果键包含点:
apiVersion: v1
metadata:
name: foo
data:
bar.baz: RnVja2VkIFVwIEJleW9uZCBBbGwgUmVjb2duaXRpb24=
语法为:
kubectl get secret foo -o jsonpath="{.data['bar\.baz']}" | base64 -d
对于带连字符的键,这是直接从 kubectl
获取解码值的转义技巧:
kubectl get secret foo -o go-template='{{ index .data \"bar-baz\" | base64decode }}'
(使用 kubectl 1.21.5 测试)
我想在 shell 脚本中获取机密的特定字段的值。
从 kubectl get secret
文档来看,这似乎是获取秘密的标准方法 returns 整个事情,以指定格式,值 base64 编码。
因此,要获取 foo
秘密的 bar
字段,输出为未编码的字符串,我正在这样做:
kubectl get secret foo -o json | jq -r ".data.bar" | base64 --decode
也就是
- 获取整个
foo
秘密作为 JSON - 管道到
jq
以从 JSON 读取 - 使用
base64
解码值
bar
字段
有没有办法仅使用 kubectl
来做到这一点?
或者在 POSIX-compliant shell 中不依赖任何依赖项的优雅方式 jq
?
试试这个
kubectl get secret foo --template={{.data.bar}} | base64 --decode
不需要jq。
从 Kubernetes 1.11 开始这应该可以工作(参见 PR 60755):
kubectl get secret foo -o go-template='{{ .data.bar | base64decode }}'
kubectl get secret foo -o jsonpath={.data.bar} | base64 --decode
如果键包含点:
apiVersion: v1
metadata:
name: foo
data:
bar.baz: RnVja2VkIFVwIEJleW9uZCBBbGwgUmVjb2duaXRpb24=
语法为:
kubectl get secret foo -o jsonpath="{.data['bar\.baz']}" | base64 -d
对于带连字符的键,这是直接从 kubectl
获取解码值的转义技巧:
kubectl get secret foo -o go-template='{{ index .data \"bar-baz\" | base64decode }}'
(使用 kubectl 1.21.5 测试)