我正在通过Kubernetes引擎在Google Cloud Platform上使用docker和kubernetes。我有在app.yaml文件中配置的机密,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: app
namespace: $CI_COMMIT_REF_SLUG
labels:
app: app
spec:
replicas: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: gcr.io/engagement-org/app:$CI_COMMIT_SHA
imagePullPolicy: Always
ports:
- containerPort: 9000
env:
- name: MAILJET_APIKEY_PUBLIC
valueFrom:
secretKeyRef:
name: mailjet
key: apikey_public
- name: MAILJET_APIKEY_PRIVATE
valueFrom:
secretKeyRef:
name: mailjet
key: apikey_private
Run Code Online (Sandbox Code Playgroud)
每次我按下一个新分支时,都会通过gitlab-ci文件中的部署创建一个新的名称空间。秘密是这样创建的:
- kubectl create secret generic mailjet --namespace=$CI_COMMIT_REF_SLUG --from-literal=apikey_public=$MAILJET_APIKEY_PUBLIC --from-literal=apikey_private=$MAILJET_APIKEY_PRIVATE || echo 'Secret already exist';
Run Code Online (Sandbox Code Playgroud)
现在,我已经更新了mailjet api密钥,并希望对所有名称空间进行更改。我可以通过在Pod上获得外壳并运行来编辑每个命名空间上的秘密kubectl edit secret mailjet --namespace=<namespace_name>
我想要的是将新的秘密值发送到将来将要创建的新容器中。当我部署一个新值时,它仍然使用旧值。
据我了解,gitlab-ci文件使用app.yaml文件将环境变量替换为值。但是我不明白app.yaml在哪里找到原始值。
谢谢您的帮助。