Bird
Raised Fist0
Kubernetesdevops~5 mins

Using Secrets as environment variables in Kubernetes - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes you need to keep passwords or keys safe when running apps. Kubernetes Secrets let you store these safely and use them as environment variables inside your app containers.
When your app needs a database password without putting it directly in the code.
When you want to keep API keys hidden but accessible to your app.
When you deploy apps that require secure tokens to connect to other services.
When you want to update sensitive data without changing your app image.
When you want to avoid exposing secrets in plain text in your deployment files.
Config File - secret-env-pod.yaml
secret-env-pod.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: bXl1c2Vy
  password: c2VjdXJlcGFzcw==
---
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "env; sleep 3600"]
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password
  restartPolicy: Never

This file has two parts separated by ---

First part creates a Secret named my-secret with two keys: username and password. The values are base64 encoded.

Second part creates a Pod named secret-env-pod that runs a simple container. It sets environment variables USERNAME and PASSWORD from the Secret keys.

This way, the app inside the container can use these secrets as environment variables safely.

Commands
This command creates the Secret and the Pod in Kubernetes from the configuration file.
Terminal
kubectl apply -f secret-env-pod.yaml
Expected OutputExpected
secret/my-secret created pod/secret-env-pod created
Check that the Pod is running and ready to use the secrets as environment variables.
Terminal
kubectl get pods
Expected OutputExpected
NAME READY STATUS RESTARTS AGE secret-env-pod 1/1 Running 0 10s
This command prints the environment variables USERNAME and PASSWORD inside the running Pod to verify the secrets are set correctly.
Terminal
kubectl exec secret-env-pod -- printenv USERNAME PASSWORD
Expected OutputExpected
myuser securepass
Key Concept

If you remember nothing else from this pattern, remember: Kubernetes Secrets can be safely injected as environment variables to keep sensitive data out of your code.

Common Mistakes
Not base64 encoding the secret values before creating the Secret.
Kubernetes requires secret data to be base64 encoded; otherwise, the Secret creation will fail or data will be incorrect.
Always encode your secret values using base64 before adding them to the Secret manifest.
Referencing a secret key in the Pod environment that does not exist in the Secret.
The Pod will fail to start or the environment variable will be empty because the key is missing.
Double-check that the secret key names in the Pod spec exactly match those in the Secret.
Exposing secrets directly in the Pod spec as plain text environment variables.
This defeats the purpose of using Secrets and risks leaking sensitive data.
Always use valueFrom with secretKeyRef to reference secrets securely.
Summary
Create a Kubernetes Secret with base64 encoded sensitive data.
Create a Pod that uses the Secret keys as environment variables via secretKeyRef.
Verify the Pod is running and the environment variables contain the secret values.

Practice

(1/5)
1. What is the main purpose of using Kubernetes Secrets as environment variables in a Pod?
easy
A. To keep sensitive data like passwords out of the container image and code
B. To speed up container startup time
C. To increase the size of the container image
D. To make the container logs more detailed

Solution

  1. Step 1: Understand what Secrets store

    Kubernetes Secrets store sensitive data such as passwords or tokens securely.
  2. Step 2: Understand environment variables usage

    Using Secrets as environment variables keeps sensitive data out of code and container images, improving security.
  3. Final Answer:

    To keep sensitive data like passwords out of the container image and code -> Option A
  4. Quick Check:

    Secrets protect sensitive data = A [OK]
Hint: Secrets keep sensitive data safe outside code [OK]
Common Mistakes:
  • Thinking Secrets speed up container startup
  • Believing Secrets increase container size
  • Assuming Secrets add logging details
2. Which of the following is the correct syntax to use a Kubernetes Secret named mysecret as an environment variable API_KEY in a Pod spec?
easy
A. "env": [{"secretKeyRef": {"name": "mysecret", "key": "api_key"}}]
B. "env": [{"name": "API_KEY", "value": "mysecret"}]
C. "env": [{"name": "API_KEY", "valueFrom": {"secretKeyRef": {"name": "mysecret", "key": "api_key"}}}]
D. "env": [{"name": "API_KEY", "secretRef": {"name": "mysecret"}}]

Solution

  1. Step 1: Identify correct env var syntax for Secrets

    The correct syntax uses valueFrom.secretKeyRef with name and key fields.
  2. Step 2: Match syntax to options

    "env": [{"name": "API_KEY", "valueFrom": {"secretKeyRef": {"name": "mysecret", "key": "api_key"}}}] matches the correct structure exactly, specifying the secret name and key.
  3. Final Answer:

    "env": [{"name": "API_KEY", "valueFrom": {"secretKeyRef": {"name": "mysecret", "key": "api_key"}}}] -> Option C
  4. Quick Check:

    Use valueFrom.secretKeyRef with name and key = D [OK]
Hint: Use valueFrom.secretKeyRef with secret name and key [OK]
Common Mistakes:
  • Using value instead of valueFrom
  • Missing the key field inside secretKeyRef
  • Using secretRef instead of secretKeyRef
3. Given this Pod spec snippet, what will be the value of environment variable DB_PASSWORD inside the container?
env:
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: password

Assuming the Secret db-secret has the key password with value supersecret123.
medium
A. db-secret
B. DB_PASSWORD
C. password
D. supersecret123

Solution

  1. Step 1: Understand valueFrom.secretKeyRef usage

    The environment variable gets its value from the Secret named db-secret and key password.
  2. Step 2: Check Secret key value

    The Secret key password holds the value supersecret123, so that is assigned to DB_PASSWORD.
  3. Final Answer:

    supersecret123 -> Option D
  4. Quick Check:

    Env var gets Secret key's value = B [OK]
Hint: Env var equals Secret's key value, not name or key name [OK]
Common Mistakes:
  • Using Secret name as value
  • Using key name as value
  • Confusing env var name with Secret key
4. You created a Secret named app-secret with key token. You try to use it in a Pod environment variable but get an error: secret "app-secret" not found. What is the most likely cause?
medium
A. The Secret was created in a different namespace than the Pod
B. The Secret key name is misspelled in the Pod spec
C. The Pod spec uses value instead of valueFrom
D. The container image does not support environment variables

Solution

  1. Step 1: Understand Secret scope in Kubernetes

    Secrets are namespace-scoped. If the Pod is in a different namespace, it cannot access the Secret.
  2. Step 2: Analyze error message

    The error secret "app-secret" not found usually means the Secret does not exist in the Pod's namespace.
  3. Final Answer:

    The Secret was created in a different namespace than the Pod -> Option A
  4. Quick Check:

    Secret must be in same namespace as Pod = C [OK]
Hint: Check Secret and Pod namespaces match [OK]
Common Mistakes:
  • Ignoring namespace differences
  • Assuming key name typo causes 'not found' error
  • Blaming container image for env var errors
5. You want to mount multiple keys from a Secret named config-secret as environment variables in a Pod. Which is the best way to do this efficiently?
hard
A. Mount the Secret as a volume and read files inside the container
B. List each key separately under env with individual valueFrom.secretKeyRef entries
C. Create multiple Secrets, one per key, and reference each in env
D. Encode all keys into one string and store as a single Secret key

Solution

  1. Step 1: Understand environment variable mapping from Secrets

    You can map each Secret key to an environment variable by listing them separately under env with valueFrom.secretKeyRef.
  2. Step 2: Compare alternatives

    Mounting as volume is valid but not environment variables. Multiple Secrets or encoding keys complicate management.
  3. Final Answer:

    List each key separately under env with individual valueFrom.secretKeyRef entries -> Option B
  4. Quick Check:

    Map each key to env var individually = A [OK]
Hint: Map each Secret key individually in env list [OK]
Common Mistakes:
  • Mounting Secret as volume when env vars needed
  • Creating many Secrets instead of one
  • Combining keys into one encoded string
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard