Nuxt3从Kubernetes Secrets获取环境变量

问题描述 投票:0回答:1

我正在将 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 传递的我的机密,或者我可以使用任何其他方法来解决此问题?

docker kubernetes nuxt.js nuxtjs3 kubernetes-secrets
1个回答
0
投票

根据链接的文档,执行此操作的方法是在服务器运行时直接在命令行上设置环境变量。

您可以覆盖 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 的名称更改为您在秘密中编码的任何内容)

© www.soinside.com 2019 - 2024. All rights reserved.