【发布时间】:2020-03-23 17:51:42
【问题描述】:
我在容器中有一个应用程序,它从 configMap 读取某些数据,如下所示
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
application.yaml: |
server:
port: 8080
host: 0.0.0.0
##
## UCP configuration.
## If skipped, it will default to looking inside of the connections.xml file.
database:
ApplicationDB:
username: username
password: hello123
现在我为密码创建了一个秘密,并在启动容器时安装为 env 变量。
apiVersion: v1
kind: Secret
metadata:
name: appdbpassword
type: Opaque
stringData:
password: hello123
我的 pod 看起来像:
apiVersion: v1
kind: Pod
metadata:
name: {{ .Values.pod.name }}
spec:
containers:
- name: {{ .Values.container.name }}
image: {{ .Values.image }}
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;"]
env:
- name: password
valueFrom:
secretKeyRef:
name: appdbpassword
key: password
volumeMounts:
- name: config-volume
mountPath: /app/app-config/application.yaml
subPath: application.yaml
volumes:
- name: config-volume
configMap:
name: app-config
我尝试在 configMap 中使用这个环境变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
application.yaml: |
server:
port: 8080
host: 0.0.0.0
##
## UCP configuration.
## If skipped, it will default to looking inside of the connections.xml file.
database:
ApplicationDB:
username: username
**password: ${password}**
但我的应用程序无法读取此密码。我在这里错过了什么吗?
编辑:
我无法将 application.yaml 更改为任何其他形式,因为我的服务器在源路径中查找 application.yaml。我们有什么方法可以在 values.yaml(helm) 文件中使用该环境变量并在 configmap 中使用它吗?
【问题讨论】:
-
你不能在 in 配置映射中使用秘密
-
@Jonas 我的用例有什么替代方案吗?
-
这是一个 Spring Boot 应用程序吗?
-
您的 k8s 密钥中的密钥
password的值必须通过 Base64 编码。 configmap 只是生成一个文件,它不支持环境变量。
标签: kubernetes kubernetes-helm kubernetes-pod kubernetes-secrets