正如@Jonas 已经建议的那样,您应该考虑使用Secret
. 这篇文章很好地描述了它。
我想使用 kubectl apply -k 并以某种方式传递 ${PASSWORD} 的值,我可以从我的构建脚本中设置它。
我猜您的脚本可以将生成的密码存储为变量或将其保存到某个文件中。您可以轻松地创建Secret
如下:
$ kustomize edit add secret sl-demo-app --from-literal=db-password=$PASSWORD
或从文件中:
$ kustomize edit add secret sl-demo-app --from-file=file/path
正如您在上述文章中所读到的:
这些命令将修改您的kustomization.yaml
并在其中添加一个
SecretGenerator
。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patchesStrategicMerge:
- custom-env.yaml
- replica-and-rollout-strategy.yaml
secretGenerator:
- literals:
- db-password=12345
name: sl-demo-app
type: Opaque
kustomize build
在您的项目目录中运行将创建以下内容Secret
:
apiVersion: v1
data:
db-password: MTIzNDU=
kind: Secret
metadata:
name: sl-demo-app-6ft88t2625
type: Opaque
...
更多细节可以在文章中细化。
如果我们想在我们的部署中使用这个秘密,我们只需要像以前一样添加一个使用该秘密的新层定义。
例如,此文件会将 db-password 值挂载为环境变量
apiVersion: apps/v1
kind: Deployment
metadata:
name: sl-demo-app
spec:
template:
spec:
containers:
- name: app
env:
- name: "DB_PASSWORD"
valueFrom:
secretKeyRef:
name: sl-demo-app
key: db.password
在您的Deployment
定义文件中,它可能类似于以下内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flux
spec:
template:
spec:
containers:
- name: some-name
env:
- name: "PASSWORD"
valueFrom:
secretKeyRef:
name: git-secret
key: git.password
args:
- --some-key=some-value
...
- --git-url=https://user:${PASSWORD}@domain.de