从文件创建密钥时,将Kubernetes Secret用作环境变量

时间:2020-11-12 11:32:00

标签: kubernetes

我已经从文件(secret.txt)中创建了一个kubernetes机密:

k1=v1
k2=v2
k3=v3

看起来像这个秘密-:

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

我将其用作吊舱中的环境变量,如下所示:

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

问题 由于数据具有作为单个base64值的值,因此出现问题。我无法在广告连播中引用它并收到此错误。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

这是发布的社区Wiki答案,以提高可见性。随意扩展它。

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

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