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

Car*_*ein 6 reactjs kubernetes

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

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

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

pod.yaml

...
 spec:
      containers:
      - command:
        - sleep
        - "3600"
        envFrom:
        - configMapRef:
            name: configmap
        image: xxxxx
        imagePullPolicy: IfNotPresent
...
Run Code Online (Sandbox Code Playgroud)

配置图

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
Run Code Online (Sandbox Code Playgroud)

反应片段

    if(!process.env.SOME_ID) {
      console.log('ID')
    }
Run Code Online (Sandbox Code Playgroud)

我的麻烦在于将环境变量传递给 React 应用程序。我确信 Pod 中的环境变量设置正确,但客户端 React 应用程序似乎没有这些变量(即不console.log打印任何内容)。

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

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

Mar*_*elo 9

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

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