使用 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:
值进行解码和编码,我们将不胜感激。
实际上可以用
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 -