I have a react application which reads a couple of API related environmental variables.
However, creating a pod in Kubernetes with the image and a configmap does not work - the application runs but the environmental variables are not set.
pod.yaml
...
spec:
containers:
- command:
- sleep
- "3600"
envFrom:
- configMapRef:
name: configmap
image: xxxxx
imagePullPolicy: IfNotPresent
...
configmap
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
React snippet
if(!process.env.SOME_ID) {
console.log('ID')
}
My trouble lies with passing the environmental variables to the React application. I am certain the environmental variables are setup correctly in the pods but seemingly, the client-side React application does not have these variables (i.e. console.log
prints nothing).
I chanced upon this article doing something similar but with Docker. It mentions that the transpiling replaces all process.env
with a string value. The trick given to mitigate this bash script which creates JavaScript file with environment variables assigned as properties of the global window object.
While I am unsure if this is doable in Kubernetes, I am wonder is there an easier way to inject environmental variables of a Kubernetes pod into a react application at runtime?
It doesn't work as you expect because the process.env
variables are replaced during transpiling. You can't access them during runtime.
You can check this guide for one possible solution: https://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-react-app-docker-and-nginx-7f9d42a91d70/. But regarding your question, there is nothing wrong with your Kubernetes configuration.