Environmental variables returning undefined for Kubernetes deployment

試著忘記壹切 提交于 2020-06-29 03:51:36

问题


I posted a question similar to this and tried to implement what the answer for this question said: How to access Kubernetes container environment variables from Next.js application?

However, when I still call my environment variables doing process.env.USERNAME, I'm still getting undefined back... Am I doing something wrong in my deployment file? Here is a copy of my deployment.yaml:

metadata:
  namespace: <namespace>
  releaseName: <release name>
  releaseVersion: 1.0.0
  target: <target>
auth:
replicaCount: 1
image:
  repository: '<name of repository is here>'
  pullPolicy: <always>
container:
  multiPorts:
  - containerPort: 443
  name: HTTPS
  protocol: TCP
  - containerPort: 80
  name: HTTP
  protocol: TCP
  env:
  - name: USERNAME
    valueFrom:
      secretKeyRef:
        name: my-username
        key: username
  - name: PASSWORD
    valueFrom:
      secretKeyRef:
        name: my-password
        key: password
  - name: HOST
    valueFrom:
      secretKeyRef:
        name: my-host
        key: host
  volumeMounts:
  - name: config
    mountPath: "/configMap"
    readOnly: true
volume:
  - name: config
    configMap:
      name: environmental-variables
resources:
  requests:
    cpu: 0.25
    memory: 256Mi
  limits:
    cpu: 1
    memory: 1024Mi
variables:
- name: NODE_ENV
  value: <node env value here>
ingress:
  enabled: true
  ingressType: <ingressType>
  applicationType: <application type>
  serviceEndpoint: <endpoint>
  multiPaths:
    - path: /
    - HTTPS
tls: 
  enabled: true
  secretName: <name>
autoscale:
  enabled: false
  minReplicas: 1
  maxReplicas: 5
  cpuAverageUtilization: 50
  memoryUtilizationValue: 50
annotations:
  ingress:
    nginx.ingress.kubernetes.io/affinity: <affinity>
    nginx.ingress.kubernetes.io/session-cookie-name: <cookie-name>
    nginx.ingress.kubernetes.io/session-cookie-expires: <number>
    nginx.ingress.kubernetes.io/session-cookie-max-age: <number>

I also created a configMap.yaml file, although I'm not sure if that's the right way to do this. Here is my configMap.yaml file:

apiVersion: v1
kind: ConfigMap
metadata:
  name: environmental-variables
data:
  .env: |
    USERNAME: <username>
    PASSWORD: <password>
    HOST: <host>

Any help will be greatly appreciated! Also I'm trying to make my environment variable as Secrets since I don't want to expose any of my variables because it contains sensitive information. I am trying to do this on a Node.js application using Express. Thank you!

EDIT: Here is how the Secrets part looks like in my yaml file

secrets:
  - name: environmental-variables
  key: USERNAME
  - name: environmental-variables
  key: PASSWORD

How my Secrets yaml file looks like:

kind: Secret
apiVersion: v1
metadata:
  name: environmental-variables
  namespace: tda-dev-duck-dev
data:
  USERNAME: <username>
  PASSWORD: <password>

回答1:


You created ConfigMap and trying to get value from secret. If you want set value from configmap then update env like following

env:
  - name: USERNAME
    valueFrom:
      configMapKeyRef:
        name: environmental-variables # this is ConfigMap Name
        key: USERNAME # this is key in ConfigMap
  - name: PASSWORD
    valueFrom:
      configMapKeyRef:
        name: environmental-variables
        key: PASSWORD
  - name: HOST
    valueFrom:
      configMapKeyRef:
        name: environmental-variables
        key: HOST

and update the configmap like following

apiVersion: v1
kind: ConfigMap
metadata:
  name: environmental-variables
data:
  USERNAME: <username>
  PASSWORD: <password>
  HOST: <host>

To learn how to define container environment variables using ConfigMap data click here

If you want to use secrets as environment variables check here




回答2:


After days of figuring out how to use Secrets as an environmental variable, I figured out how to reference it in my nodejs application!

Before I was doing the normal way of calling environmental variables, process.env.VARIABLE_NAME, but that did not work for me when I had Secrets as an environment variable. In order to get the value of the variable, I had to do process.env.ENVIRONMENTAL_VARIABLES_USERNAME in my Javascript file and that worked for me! Where ENVIRONMENTAL_VARIABLES is the name and USERNAME is the key!

Not sure if this will help anyone else but this is how I managed to access my Secrets in my nodejs application!



来源:https://stackoverflow.com/questions/62394331/environmental-variables-returning-undefined-for-kubernetes-deployment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!