在kubernetes secret中设置环境变量

Set environment variable in kubernetes secret

使用 Kubernetes .yml 文件时,我可以执行以下操作:

$ cat configmap.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  foo: ${FOO}
  bar: ${BAR}
  static: doesNotChange

$ export FOO=myFooVal
$ export BAR=myBarVal
$ cat configmap.yml | envsubst | kubectl apply -f -

这将在 configmap.yml 文件实际应用到集群之前替换 ${FOO}${BAR}

如何使用 Kubernetes secret 实现完全相同的行为,其数据值采用 base64 编码?

我需要读取 data: 字段中的所有键,解码值,应用环境变量并再次编码。

非常感谢能够对 data: 值进行解码和编码的工具。

实际上可以将 secret.yml 存储为 stringData 而不是 data,这样可以将文件保存为纯文本(SOPS 加密仍然可行并受到鼓励)

$ cat secret.yml

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
  namespace: default
type: Opaque
stringData:
  dotenv: |
    DATABASE_URL="postgresql://test:test@localhost:5432/test?schema=public"
    API_PORT=${PORT}
    FOO=${FOO}
    BAR=${BAR}

$ export PORT=80
$ export FOO=myFooValue
$ export BAR=myBarValue
$ cat secret.yml | envsubst | kubectl apply -f -

肯定有一个加号,这不仅允许创建秘密,而且还可以更新。

仅供参考,这里是使用 SOPS 的完整调用:

$ sops --decrypt secret.enc.yml | envsubst | kubectl apply -f -