【问题标题】:kubectl: get specific value from a secret in plaintextkubectl:从明文中的秘密中获取特定值
【发布时间】:2022-04-04 14:05:30
【问题描述】:

我想在 shell 脚本中获取密钥的特定字段的值。

kubectl get secret 文档中,似乎获取秘密的标准方法会以指定格式返回整个内容,并使用 base64 编码的值。

所以,要获取foo 秘密的bar 字段,输出为未编码的字符串,我这样做:

kubectl get secret foo -o json | jq -r ".data.bar" | base64 --decode

那是

  • 以 JSON 格式获取整个 foo 秘密
  • 管道到jq 以从JSON 中读取bar 字段
  • 使用base64解码值

有没有办法只使用kubectl

或者在符合 POSIX 标准的 shell 中不依赖任何依赖项(如 jq)的优雅方式?

【问题讨论】:

  • 试试这个kubectl get secret foo --template={{.data.bar}} | base64 --decode不需要jq
  • 我不知道使用 kubectl 的内部机制解码 base64 的任何方法,但是要从秘密中获取特定字段,您可以使用 jsonpath 输出:kubernetes.io/docs/reference/kubectl/jsonpath - 您可以管道/组合输出使用此处的一种方法,也可以避免 base64 命令依赖:stackoverflow.com/questions/47800145/…
  • 您可以尝试使用 sed kubectl get secret foo | sed 's/^.*bar: \(.*\).*$/\1/' | base64 -d
  • 这些都是非常有用的选项,谢谢!请将它们作为答案发布,以便我投票!
  • 我认为@mchawre 没有比这更好的答案了,

标签: kubernetes posix kubectl


【解决方案1】:

试试这个

kubectl get secret foo --template={{.data.bar}} | base64 --decode

不需要jq。

【讨论】:

    【解决方案2】:

    这应该从 Kubernetes 1.11 开始工作(参见 PR 60755):

    kubectl get secret foo -o go-template='{{ .data.bar | base64decode }}'

    【讨论】:

      【解决方案3】:
      kubectl get secret foo -o jsonpath={.data.bar} | base64 --decode
      

      https://kubernetes.io/docs/reference/kubectl/jsonpath/

      【讨论】:

      • 即使路径包含连字符,这种方法也适用于我。使用--template 不会(至少,不是没有某种程度的转义,嗯,逃脱了me
      • 刚刚添加了一个新答案,该答案显示了直接从 kubectl 从连字符路径/密钥中解码秘密的转义,而无需通过管道传输到外部 base64 可执行文件。
      【解决方案4】:

      对于连字符键,这是直接从kubectl 获取解码值的转义技巧:

      kubectl get secret foo -o go-template='{{ index .data \"bar-baz\" | base64decode }}'
      

      (使用 kubectl 1.21.5 测试)

      【讨论】:

        【解决方案5】:

        如果键包含点:

        apiVersion: v1
        metadata:
          name: foo
        data:
          bar.baz: RnVja2VkIFVwIEJleW9uZCBBbGwgUmVjb2duaXRpb24=
        
        

        语法是:

        kubectl get secret foo -o jsonpath="{.data['bar\.baz']}" | base64 -d
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 2016-09-07
          • 2012-11-13
          相关资源
          最近更新 更多