首页 > 解决方案 > 从反应应用程序读取 kubernetes pod 的 configmap 中设置的环境变量?

问题描述

我有一个读取几个 API 相关环境变量的反应应用程序。

  1. 在本地机器或虚拟机上运行时,API 变量会被正确读取到应用程序中。
  2. 当硬编码到 react 应用程序本身时,应用程序也会运行。

但是,在 Kubernetes 中使用映像configmap创建 pod不起作用 - 应用程序运行但未设置环境变量。

豆荚.yaml

...
 spec:
      containers:
      - command:
        - sleep
        - "3600"
        envFrom:
        - configMapRef:
            name: configmap
        image: xxxxx
        imagePullPolicy: IfNotPresent
...

配置图

apiVersion: v1
data:
  API_HOST: xxxxxxx
  SOME_ID: abcdef
  NODE_ENV: development
  PROVIDER: GCP
kind: ConfigMap
metadata:
  creationTimestamp: xxxx
  name: configmap
  namespace: xxxx
  resourceVersion: xxxx
  selfLink: xxxx
  uid: xxxx

反应片段

    if(!process.env.SOME_ID) {
      console.log('ID')
    }

我的麻烦在于将环境变量传递给 React 应用程序。我确定在 pod 中正确设置了环境变量,但客户端 React 应用程序似乎没有这些变量(即console.log什么也不打印)。

我偶然在这篇文章中做了类似的事情,但使用的是 Docker。它提到转译将 all 替换process.env为字符串值。缓解这个 bash 脚本的技巧,该脚本创建 JavaScript 文件,其中环境变量分配为全局窗口对象的属性。

虽然我不确定这在 Kubernetes 中是否可行,但我想知道是否有一种更简单的方法可以在运行时将 Kubernetes pod 的环境变量注入到反应应用程序中?

标签: reactjskubernetes

解决方案


它不像您预期​​的那样工作,因为process.env变量在转译期间被替换。您无法在运行时访问它们。

您可以查看本指南以获取一种可能的解决方案:https ://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-react-app-docker-and-nginx-7f9d42a91d70/ . 但是关于您的问题,您的 Kubernetes 配置没有问题。


推荐阅读