我正在将 Nuxt3 与 K8 一起使用,并希望使用
Kubernetes Secrets
将一些秘密传递到我的 Nuxt3 应用程序。
我无法直接在 Docker 容器中设置环境变量,因为容器是公共的。
所以我像这样构建镜像 docker 镜像
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
ENTRYPOINT [ "node", ".output/server/index.mjs" ]
然后使用 Kubernetes 机密将机密传递给该映像,如下所示
...
spec:
containers:
- name: frontend
image: <DOCKER_IMAGE>:<VERSION>
imagePullPolicy: Always
envFrom:
- secretRef:
name: frontend-secret
ports:
- containerPort: 3000
restartPolicy: Always
...
我可以看到我的 pod 中的环境变量设置正确,但 Nuxt 应用程序无法读取这些变量。我的理解可能是因为Nuxt在dev、build和generate时读取环境变量,而我的容器已经构建完成,构建时Docker中没有可用的环境变量。
现在 Nuxt 应用程序如何读取构建阶段后 Kubernetes 传递的我的机密,或者我可以使用任何其他方法来解决此问题?
根据链接的文档,执行此操作的方法是在服务器运行时直接在命令行上设置环境变量。
您可以覆盖 ENTRYPOINT,传递从秘密加载的环境变量
...
spec:
containers:
- name: frontend
image: <DOCKER_IMAGE>:<VERSION>
imagePullPolicy: Always
env:
- name: FRONTEND_SECRET
valueFrom:
secretKeyRef:
key: frontend-secret
name: frontend-secret
command:
- FRONTEND_SECRET=${FRONTEND_SECRET}
- node
- .output/server/index.mjs
ports:
- containerPort: 3000
restartPolicy: Always
...
(显然将 var 的名称更改为您在秘密中编码的任何内容)