给出以下kustomize补丁:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flux
spec:
template:
spec:
containers:
- name: some-name
args:
- --some-key=some-value
...
- --git-url=https://user:${PASSWORD}@domain.de
我想使用kubectl apply -k
,并以某种方式传递${PASSWORD}
的值,该值可以在构建脚本中设置。
到目前为止,我唯一可以使用的解决方案是将${PASSWORD}
替换为sed
,但我更希望使用Kustomize解决方案。
答案 0 :(得分:2)
正如@Jonas已经建议的那样,您应该考虑使用Secret
。 this文章对此进行了很好的描述。
我想使用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
...
您可以在article中完善更多细节。
如果我们想在我们的部署中使用这个秘密,就像 之前,添加一个使用秘密的新图层定义。
例如,此文件将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