How to pass all values from multiple Secrets to env variables in Kuberentes?

11/28/2018

I have multiple Secrets in a Kubernetes. All of them contain many values, as example:

apiVersion: v1
kind: Secret
metadata:
  name: paypal-secret
type: Opaque
data:
  PAYPAL_CLIENT_ID: base64_PP_client_id
  PAYPAL_SECRET: base64_pp_secret
stringData:
  PAYPAL_API: https://api.paypal.com/v1
  PAYPAL_HOST: api.paypal.com

I'm curious how to pass all of the values from all Secrets to a ReplicaSet for example.

I tried this one approach:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: pp-debts
  labels:
    environment: prod
spec:
  replicas: 1
  selector:
    matchLabels:
      environment: prod
  template:
    metadata:
      labels:
        environment: prod
    spec:
      containers:
      - name: integration-app
        image: my-container-image
        envFrom:
        - secretRef:
          name: intercom-secret
        envFrom:
        - secretRef:
            name: paypal-secret
        envFrom:
        - secretRef:
            name: postgres-secret
        envFrom:
        - secretRef:
            name: redis-secret

But when I connected to the pod, and looked on the env variables, I was able to see only values from the redis-secret.

-- Alex Fruzenshtein
kubernetes

1 Answer

11/28/2018

Try using one envFrom with multiple entries under it as below:

      - name: integration-app
        image: my-container-image
        envFrom:
        - secretRef:
            name: intercom-secret
        - secretRef:
            name: paypal-secret
        - secretRef:
            name: postgres-secret
        - secretRef:
            name: redis-secret

There's an example at the bottom of https://dchua.com/2017/04/21/load-env-variables-from-configmaps-and-secrets-upon-pod-boot/

-- Ryan Dawson
Source: StackOverflow