要从React应用程序读取kubernetes pod的configmap中设置的环境变量吗?

时间:2019-10-04 06:35:59

标签: reactjs kubernetes

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

  1. 在本地计算机或VM上运行时,API变量已正确读取到应用程序中。
  2. 当硬编码到react应用程序本身中时,该应用程序也将运行。

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

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什么也不打印)。

我碰巧在article上做了类似的事情,但是使用了Docker。它提到转码将所有process.env替换为一个字符串值。缓解此bash脚本的技巧,该脚本使用分配为全局窗口对象属性的环境变量来创建JavaScript文件。

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

1 个答案:

答案 0 :(得分:2)

它无法按预期工作,因为process.env变量在转译过程中被替换。您在运行时无法访问它们。

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