Kubernetes中部署的Rails应用无法读取ConfigMap提供的环境变量
问题根因
- ConfigMap生成逻辑不符合预期:你当前使用Kustomize的
configMapGenerator.files加载.env文件,该方式会将整个.env文件作为单个键值对存入ConfigMap(键名为.env,值为文件全部内容),不会自动解析文件内每行KEY=VALUE为独立的ConfigMap条目。从ConfigMap的描述信息可以验证:Data字段下仅存在.env一个键,而envFrom只能将ConfigMap的顶级键作为环境变量注入容器,因此容器内不会生成APP_PORT这类独立环境变量。 - Deployment配置存在错误:你提供的
api-deployment.yml中,envFrom字段被写在imagePullPolicy的行尾注释中,不会被Kubernetes识别;同时你填写的ConfigMap名称为backend-api-configma,比实际名称少了末尾的p,拼写错误也会导致配置无法生效。
解决方法
- 修改
kustomization.yml的ConfigMap生成配置,将files参数替换为envs,envs参数会自动解析.env文件内的键值对为独立的ConfigMap条目:
kind: Kustomization configMapGenerator: - name: backend-api-configmap envs: - .env bases: - ../../base patchesStrategicMerge: - api-deployment.yml
- 修正
api-deployment.yml的语法错误和拼写错误,将envFrom移出注释,填写正确的ConfigMap名称:
apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: - image: nginx imagePullPolicy: Never envFrom: - configMapRef: name: backend-api-configmap
- 重新执行Kustomize部署,部署完成后进入容器执行
env即可看到对应环境变量,Rails应用可正常读取。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

