【问题标题】:Environmental variables returning undefined for Kubernetes deployment为 Kubernetes 部署返回未定义的环境变量
【发布时间】:2020-06-15 18:08:05
【问题描述】:

我发布了一个与此类似的question,并试图实现这个问题的答案所说的:How to access Kubernetes container environment variables from Next.js application?

但是,当我仍然调用我的环境变量执行process.env.USERNAME 时,我仍然得到未定义的返回......我在我的部署文件中做错了什么吗?这是我的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>

我还创建了一个configMap.yaml 文件,尽管我不确定这是否是正确的方法。这是我的configMap.yaml 文件:

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

任何帮助将不胜感激!此外,我试图将我的环境变量设置为 Secrets,因为我不想公开我的任何变量,因为它包含敏感信息。我正在尝试在使用 Express 的 Node.js 应用程序上执行此操作。谢谢!

编辑:这是我的 yaml 文件中 Secrets 部分的样子

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

我的 Secrets yaml 文件长什么样:

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

【问题讨论】:

  • 在 ConfigMap 中查看管道字符 (|) - 这是问题的指示符。基本上,您的 configmap 只有 1 个条目,键 .env 和 value 是带有 USERNAME、PASSWORD 等的多行字符串。为了能够将 ConfigMap 中的条目实际挂载为 env 变量,您需要在 configmap 的数据块中有多个条目, 每条信息 1 个条目。

标签: node.js kubernetes deployment environment-variables kubernetes-secrets


【解决方案1】:

您创建了ConfigMap 并试图从秘密中获取价值。如果你想从 configmap 中设置值,那么像下面这样更新 env

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

然后像下面这样更新配置图

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

要了解如何使用 ConfigMap 数据定义容器环境变量,请点击here

如果您想使用机密作为环境变量,请查看here

【讨论】:

  • 关于秘密的问题.. 什么是秘密以及使用秘密的好处?
  • 您也可以像访问环境变量一样访问秘密,即process.env.*
  • 要了解secret vs configmap,请查看stackoverflow.com/a/36925553/6027873
  • 是的,您可以将秘密作为环境变量传递..链接kubernetes.io/docs/concepts/configuration/secret/…
  • 如果我想访问机密,我尝试执行 process.env.* 但仍然未定义 - 访问它的方法是像文档中所说的那样执行 $SECRET_NAME 吗?
【解决方案2】:

在研究了如何使用 Secrets 作为环境变量几天之后,我想出了如何在我的 nodejs 应用程序中引用它!

在我以正常方式调用环境变量之前,process.env.VARIABLE_NAME,但是当我将 Secrets 作为环境变量时,这对我不起作用。为了获得变量的值,我必须在我的 Javascript 文件中执行process.env.ENVIRONMENTAL_VARIABLES_USERNAME,这对我有用!其中ENVIRONMENTAL_VARIABLESnameUSERNAME 是关键!

不确定这是否对其他人有帮助,但这是我设法在我的 nodejs 应用程序中访问我的秘密的方式!

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2020-07-22
    • 2020-12-29
    • 2021-12-14
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多