我已经阅读了各种github文章,以使Kong的代码可以访问OS环境变量,我应该使用env指令。我对kong非常陌生,我不了解它的内部工作原理。但是我尝试这样做:在nginx.conf中添加env MY_ENV_VARIABLE;
,但是os.getenv("MY_ENV_VARIABLE")
仍然是nil。
我正在尝试在Lua文件kong/kong/core/
中进行更改。我将Kong用作带有docker-entrypoint.sh的Docker容器,
kong prepare --v -p "/usr/local/kong" -c "/usr/local/kong/kong.conf"
,Dockerfile中的命令为CMD ["/usr/local/openresty/nginx/sbin/nginx", "-c", "/usr/local/kong/nginx.conf", "-p", "/usr/local/kong/"]
此Docker映像在Kubernetes中运行,环境变量在部署中传递。在容器内部,如果执行echo $MY_ENV_VARIABLE
,则可以看到传递的值。即使我编写了一个示例lua代码(例如test.lua),它会打印os.getenv(“ MY_ENV_VARIABLE”)并使用resty test.lua
运行它,它也会打印该值。
在docker容器内(在docker exec -it .. sh之后),我找到了两个nginx.conf。一种是自动生成的,另一种是我创建图像的代码中的内容。
./usr/local/kong/nginx.conf
./usr/local/openresty/nginx/conf/nginx.conf
我相信第一个文件是自动生成的。第二个文件中包含env MY_ENV_VARIABLE;
。当在数据路径请求期间命中lua代码时,它仍然在lua代码中,我添加的os.getenv
返回nil。
我在这里附加第二个conf文件以供参考:
worker_processes 1;
env KONG_DECRYPT_KEY;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
enter code here
include /etc/nginx/conf.d/*.conf;
}
所以,现在我的问题是,我在这里想念什么?我应该怎么做才能使我在kong / core中编写的新的额外Lua代码可以访问OS环境变量?