You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时将Kubernetes Pod环境变量注入React应用

React应用读取Kubernetes Pod运行时环境变量方案

首先明确核心限制:React 是客户端运行的前端框架,代码经构建后生成静态产物,默认无法直接读取 Pod 容器内部的系统环境变量(该变量仅存在于容器运行时的服务端环境)。你之前使用静态config.json的方案只能读取构建阶段固化的数值,自然无法适配Pod调度、重启后生成的动态服务地址。

以下是生产环境常用的轻量实现方案:

实现步骤

1. 编写容器启动脚本动态生成前端配置文件

在项目根目录新建entrypoint.sh启动脚本,容器启动时会读取当前Pod的环境变量,生成前端可直接引入的JS配置文件:

#!/bin/sh
# 清空旧配置,生成新的env.js文件,将需要的变量挂载到window全局对象
echo "window.__POD_ENV__ = {" > /usr/share/nginx/html/env.js
# 仅导出需要的变量,不要全量导出避免泄露K8s集群敏感信息
echo "  REACT_APP_ENV_VARIABLE: \"$REACT_APP_ENV_VARIABLE\"," >> /usr/share/nginx/html/env.js
echo "  REDIS_SERVICE_HOST: \"$REDIS_PORT_6379_TCP_ADDR\"," >> /usr/share/nginx/html/env.js
echo "  REDIS_SERVICE_PORT: \"$REDIS_SERVICE_PORT\"," >> /usr/share/nginx/html/env.js
echo "  BACKEND_SERVICE_HOST: \"$PLAYGROUND_SERVICE_SERVICE_HOST\"," >> /usr/share/nginx/html/env.js
echo "  BACKEND_SERVICE_PORT: \"$PLAYGROUND_SERVICE_SERVICE_PORT\"," >> /usr/share/nginx/html/env.js
echo "}" >> /usr/share/nginx/html/env.js
# 执行原nginx启动命令(如果你用的是其他前端服务,替换为对应启动命令即可)
exec nginx -g "daemon off;"

2. 前端入口引入配置文件

在项目public/index.html的<head>标签最顶部引入生成的配置文件,确保页面加载时优先拿到环境变量:

<script src="%PUBLIC_URL%/env.js"></script>

3. React组件中直接使用变量

修改你的业务代码,直接读取window上挂载的环境变量即可,可以加兜底逻辑避免变量不存在导致报错:

function App() {
  // 兜底避免变量未初始化报错
  const podEnv = window.__POD_ENV__ || {};
  return (
    <div className="App">
      <header className="App-header">
        <p>
            <code>ENV. VARIABLE: </code> {podEnv.REACT_APP_ENV_VARIABLE}
        </p>
      </header>
    </div>
  );
}

export default App;

4. 修改Dockerfile适配启动脚本

在你的React镜像Dockerfile中增加启动脚本配置,替换原有默认启动命令:

# 前面的构建步骤(构建React产物、复制到nginx目录等)保持不变
# 新增:复制启动脚本到容器内,设置执行权限
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 替换默认启动命令为自定义脚本
ENTRYPOINT ["/entrypoint.sh"]

方案说明

该方案无需修改业务逻辑架构,每次Pod重启、重新调度时,启动脚本都会自动读取当前Pod最新的环境变量生成配置文件,无需重新构建镜像即可自动适配服务地址变更的场景。

注意:不要将密码、密钥等敏感信息导出到前端全局变量,所有前端可访问的变量都是公开的,敏感请求请走后端服务代理。

内容的提问来源于stack exchange,提问作者AbreQueVoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:54:03