【问题标题】:Use Kubernetes Secret as Environment Variable when secret is create from a file从文件创建机密时,使用 Kubernetes 机密作为环境变量
【发布时间】:2020-11-19 16:21:39
【问题描述】:

我从一个文件 (secret.txt) 创建了一个 kubernetes 密钥:

k1=v1
k2=v2
k3=v3

看起来像这个秘密-:

apiVersion: v1
metadata:
  name: secret007
data:
  secret.txt: bWFza1NhbHQ9InRlc3RzYWx0IgpzM1

我在 pod 中使用它作为环境变量,如下所示:

 - name: KEY1
   valueFrom:
     secretKeyRef:
       key: k1
       name: secret007
       optional: false

问题 问题是因为数据的值是单个 base64 值。我无法在 pod 中引用它并收到此错误。

  Warning  Failed     6s (x2 over 6s)  kubelet, Error: couldn't find key k1 in Secret kube-system/secret007

请建议如何在不更改密钥格式的情况下执行此操作,即 Secret 将是文件名的单个键值,所有 secret.txt 值作为单个 base64 值。有可能吗?

【问题讨论】:

  • Kubernetes 从不尝试查看 Secret 值(或 ConfigMap 值)的“内部”。您可以参考问题中显示的整个 Secret 值,但无法告诉它 (a) 该值实际上是换行符分隔的键=值对(与 TOML、YAML、JSON、XML , ...) 和 (b) 你想从中选择一些特定的值。
  • 感谢您的解释。明白了,不读秘密是有道理的。
  • 如果可以解决您的问题,请考虑发布答案。这对社区的其他人来说会更加明显。

标签: kubernetes


【解决方案1】:

您可以从环境文件创建秘密条目

kubectl create secret generic test --from-env-file=secret.txt

并且输出将在您的秘密中具有不同的值

apiVersion: v1
data:
  k1: djE=
  k2: djI=
  k3: djM=
kind: Secret
metadata:
  creationTimestamp: null
  name: test

【讨论】:

  • 我知道这件事。但想在不改变秘密格式的情况下做到这一点。正如@david-maze 所提到的,这是不可能的,因为 k8s 不读取秘密并且不知道里面有什么。谢谢
【解决方案2】:

这是为提高可见性而发布的社区 wiki 答案。随意扩展它。

正如@DavidMaze 已经提到的,Kubernetes 不会在“内部”查看 SecretConfigMap 值:

您可以引用整个 Secret 值,如您在 问题,但没有办法告诉它(a)该值实际上是 换行符分隔的键=值对(与 TOML、YAML、JSON、 XML, ...) 和 (b) 您想从中选择一些特定值 在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 2020-10-05
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多