在kubernetes Secret中设置环境变量

问题描述 投票:0回答:1

使用 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 -

这将在实际将文件应用到集群之前替换

${FOO}
文件中的
${BAR}
configmap.yml

如何使用数据值经过 Base64 编码的 Kubernetes 密钥实现完全相同的行为?

我需要读取

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

如果有一个工具可以对

data:
值进行解码和编码,我们将不胜感激。

kubernetes kubernetes-secrets
1个回答
1
投票

实际上可以用

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 -
© www.soinside.com 2019 - 2024. All rights reserved.