【发布时间】:2021-04-15 23:16:58
【问题描述】:
我有一个使用自定义 nginx + php-fpm docker 镜像构建的 laravel docker 容器。
我已经成功部署到k8s集群并且可以正常访问,也可以登录pod运行env我可以看到我的k8s中所有的环境变量都设置成功了configmap
在 laravel 代码中,我读取了这样的环境变量:
例如SomeController.php 有以下代码:
$apiCode = env('API_CODE');
// also tried like this $apiCode = getenv('API_CODE'); still not successful in fetching
我的问题和这个问题是,即使在使用env 命令的 pod 内,环境变量总是在 php 代码中读取为空,我可以看到它们已正确设置,但 php 代码无法找到它们。
(我没有缓存 laravel 配置,所以我们可以排除这种情况,也尝试使用命令 php artisan config:clear 事先,仍然相同的结果无法获取 php 中的环境变量)
在 kubernetes 定义 yml 中,我将 configmap 附加到 env 变量,如下所示,并看到它们在 pod 中正确定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
labels:
tier: api
spec:
replicas: 1
selector:
matchLabels:
tier: api
template:
metadata:
labels:
tier: api
spec:
containers:
- name: api
image: somenging-fpm-image:latest
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: api-config-env-file
目前我很迷茫,不知道为什么会发生这种情况。
我最初认为 configmap 可能是在 pod 启动后创建的(php fpm 以某种方式处理然后没有选择启动 env)
为了验证和排除这种情况,我销毁了 pod 并重新创建了 deployment+pod 以使用已经存在的 configmap,但结果仍然是相同的 php 没有获取 pod 中存在的 env var
我可以通过kubectl exec -it [podnamehere] /bin/bash 登录到 pod 并在那里运行env,并且可以看到从我的配置映射api-config-env-file 正确设置的环境变量,但代码总是让它们为空,无法读取它们
【问题讨论】:
标签: php laravel nginx kubernetes environment-variables