Node.js 如何通过kubernetes将变量传递给Reactjs
我有一个简单的Node.js 如何通过kubernetes将变量传递给Reactjs,node.js,reactjs,docker,kubernetes,Node.js,Reactjs,Docker,Kubernetes,我有一个简单的reactjs应用程序,我将在我的kubernetes集群中部署它 reactjs应用程序的Dockerfile如下所示: # build env FROM node:13.12.0-alpine as build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . ./ RUN npm run build # production env FROM nginx:stable-alpine COPY --from=build
reactjs
应用程序,我将在我的kubernetes
集群中部署它
reactjs
应用程序的Dockerfile
如下所示:
# build env
FROM node:13.12.0-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build
# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
我想通过kubernetes
传递两个环境变量,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: frontend
replicas: 1
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: 19950818/k8s:frontend
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: REACT_APP_BACKEND_URL
valueFrom:
configMapKeyRef:
name: backend-configs
key: backend.url
- name: REACT_APP_BACKEND_PORT
valueFrom:
configMapKeyRef:
name: backend-configs
key: backend.port
let url = process.env.REACT_APP_BACKEND_URL
let port = process.env.REACT_APP_BACKEND_PORT
我使用NodeJs
访问这些变量,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: frontend
replicas: 1
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: 19950818/k8s:frontend
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: REACT_APP_BACKEND_URL
valueFrom:
configMapKeyRef:
name: backend-configs
key: backend.url
- name: REACT_APP_BACKEND_PORT
valueFrom:
configMapKeyRef:
name: backend-configs
key: backend.port
let url = process.env.REACT_APP_BACKEND_URL
let port = process.env.REACT_APP_BACKEND_PORT
但是如何修改上面提到的Dockerfile
来传递这两个变量呢?您显示的js:
let url=process.env.REACT\u APP\u BACKEND\u url
让端口=process.env.REACT\u APP\u BACKEND\u端口
在用户浏览器中运行,而不是在kubernetes或docker中运行,因此在运行代码时,服务器上设置的环境变量不存在。kubernetes/docker容器仅将javascript作为文件提供给用户的浏览器
基本上,您不能以这种方式使用环境变量。我对NodeJs生态系统不太熟悉,但是如果
process.env…
可以直接访问系统变量,您应该都设置好了。@Turing85您不认为我们需要通过Dockerfile
或其他任何方式来传递它吗?不。如果我们用docker run…
启动容器,我们可以使用选项-e…
来设置环境变量(例如docker run-e keydove\u USER=keydove-e keydove\u PASSWORD=keydove jboss/keydove
)。kubernetes在定义环境变量时使用了相同的机制。微服务的整个思想是将应用程序与其配置分离。运行时必须传递环境变量等配置值。您可以在代码中为某些变量指定默认值,但可以使用env变量覆盖它们。您的前端(所有javascript)不会在node、docker或kubernetes中运行,而是在用户机器上的浏览器中运行,该用户机器远离您的服务器,并具有自己独特的环境。没有直接的方法将这些环境变量传递到您的代码中,除了在提供代码之前重写代码(即,将代码作为模板编写,构建系统使用这些变量重写),或者通过rest API提供这些值,您必须单独编写。这是正确的,我想这就是原因。