Kong自定义Golang插件在K8s/Helm部署环境下无法正常工作
问题根因
你的镜像构建逻辑存在环境变量注入路径错误:
- 你将
KONG_PLUGINS、KONG_PLUGINSERVER_NAMES、KONG_PLUGINSERVER_*_QUERY_CMD这些Kong加载Go插件必需的环境变量写入了~/.bashrc文件,仅在交互式Shell场景下会自动加载,这也是本地Docker、docker-compose部署能正常运行的原因。 - Kubernetes集群中容器启动时直接运行Kong入口进程,属于非交互式Shell,不会加载
.bashrc配置,Kong进程完全读取不到插件相关的环境变量,因此抛出插件未安装、无法填充默认配置的错误。
正确配置方案
1. 修正自定义镜像Dockerfile
废弃写.bashrc动态拼接环境变量的逻辑,直接通过Dockerfile的ENV指令声明固定配置,同时给插件二进制加上可执行权限,参考示例:
FROM golang:1.18.3-alpine as pluginbuild COPY ./charts/custom-plugins/ /app/custom-plugins RUN cd /app/custom-plugins && \ for d in ./*/ ; do (cd "$d" && go mod tidy && GOOS=linux GOARCH=amd64 go build .); done RUN mkdir /app/all-plugin-execs && cd /app/custom-plugins && \ find . -type f -not -name "*.*" | xargs -i cp {} /app/all-plugin-execs/ FROM kong:2.8 # 拷贝编译好的插件二进制到系统PATH目录 COPY --from=pluginbuild /app/all-plugin-execs/ /usr/local/bin/ # 给插件二进制加可执行权限 RUN chmod +x /usr/local/bin/go-wait # 显式声明Go插件必需的环境变量,bundled为Kong官方自带插件集,必须保留 ENV KONG_PLUGINS=bundled,go-wait ENV KONG_PLUGINSERVER_NAMES=go-wait ENV KONG_PLUGINSERVER_GO_WAIT_QUERY_CMD="/usr/local/bin/go-wait -dump"
如果存在多个自定义Go插件,直接在上述三个ENV配置中追加对应值即可,不要依赖Shell脚本动态拼接配置文件。
2. 对齐Helm Chart配置
使用官方Kong Helm Chart部署时,可选择直接在values.yaml中注入环境变量(优先级高于镜像内ENV配置,适合多环境差异化部署),关键配置参考:
image: repository: 你的自定义镜像仓库地址 tag: 你的自定义镜像版本tag pullPolicy: IfNotPresent # 插件相关环境变量注入,和镜像内ENV二选一即可 env: KONG_PLUGINS: bundled,go-wait KONG_PLUGINSERVER_NAMES: go-wait KONG_PLUGINSERVER_GO_WAIT_QUERY_CMD: "/usr/local/bin/go-wait -dump" # 确认Go插件服务器开关未被关闭 pluginserver: enabled: true
3. 部署后校验
部署完成后进入Kong代理Pod执行以下检查,确认配置生效:
- 执行
env | grep KONG_PLUGIN,确认所有插件相关环境变量正常输出 - 执行
/usr/local/bin/go-wait -dump,确认插件二进制可正常运行、无依赖缺失报错 - 查看Kong启动日志,确认无插件加载类报错后,再创建KongPlugin自定义资源测试功能
提示:Kong 2.8版本默认内置Go插件服务器能力,不需要额外挂载插件配置文件,只要环境变量正确、二进制具备可执行权限即可正常加载。
内容的提问来源于stack exchange,提问作者Chalukya J
相关产品推荐
相关产品推荐

