The app is pretty simple: its job is to display three types of variables:
Dockerfile and overwritten on pod creation,The code is as follows:
import './App.css';
function App() {
let something = "3Wzc3mgdlIFwc4"
return (
<div className="App">
<header className="App-header">
<p>
<code>ENV1: </code> <em>{process.env.REACT_APP_ENV_VARIABLE}</em>
</p>
<p>
<code>ENV2: </code> <em>{process.env.REACT_APP_ENV_VARIABLE_TWO}</em>
</p>
<p>
Hash: <code>{something || "not set"}</code>
</p>
</header>
</div>
);
}
export default App;Dockerfile used when building an image got the following values:
FROM node:17.1.0-buster-slim as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
RUN npm config set unsafe-perm true
RUN npm install -g npm@8.1.3
RUN npm install --force
RUN npm install react-scripts@4.0.3 -g
COPY . ./
RUN chown -R node /app/node_modules
ENV REACT_APP_ENV_VARIABLE "It works!"
RUN npm run build
FROM nginx:1.21.4-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]As I want to deploy the app on Kubernetes, the following pod and service are defined:
apiVersion: v1
kind: Pod
metadata:
name: playground-pod
labels:
name: playground-pod
app: playground-app
spec:
containers:
- name: playground
image: localhost:5000/playground:1.0
ports:
- containerPort: 80
env:
- name: REACT_APP_ENV_VARIABLE
value: "Variable from Kube!"
- name: REACT_APP_ENV_VARIABLE_TWO
value: "192.168.0.120"apiVersion: v1
kind: Service
metadata:
name: playground-service
labels:
name: playground-service
app: playground-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30003
protocol: TCP
selector:
name: playground-pod
app: playground-appAfter successful creation of the pod and the service, the variables in the pod container look this way:
/ # printenv | grep REACT_APP
REACT_APP_ENV_VARIABLE=Variable from Kube!
REACT_APP_ENV_VARIABLE_TWO=192.168.0.120Yet, when I display the page in the browser, I can see something like this:
ENV1: It works!
ENV2:
Hash: 3Wzc3mgdlIFwc4So, as you see, the local variable is displayed as expected, the variable that was intended to be overwritten is not overwritten and keeps the value from the Dockerfile, and the second variable that was only present in pod definition is not displayed at all.
Why is that? What should I do to make it work as expected?