Chapter 5.3 - Injection into Pods
Learning Objectives
By the end of this chapter, you will be able to:
- Inject ConfigMaps as environment variables
- Mount ConfigMaps as volumes
- Use Secrets securely
- Understand the different injection methods
- Choose the right method based on the use case
Overview
There are several ways to inject ConfigMaps and Secrets into your Pods. Each method has its own advantages and specific use cases.
Injection Methods
1. Environment Variables
From ConfigMap
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: app
image: nginx:1.20
env:
# Method 1: A specific key
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
# Method 2: All keys
- name: CONFIGMAP_ENV
valueFrom:
configMapRef:
name: app-config
envFrom:
# Method 3: All ConfigMap keys
- configMapRef:
name: app-config
From Secret
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
envFrom:
- secretRef:
name: db-secret
2. Volumes
ConfigMap as a Volume
apiVersion: v1
kind: Pod
metadata:
name: configmap-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
volumes:
- name: config
configMap:
name: app-config
# Optional: include only certain keys
items:
- key: database_url
path: db-url
- key: log_level
path: log-level
Secret as a Volume
volumes:
- name: secrets
secret:
secretName: db-secret
defaultMode: 0400 # Permissions (read-only)
Complete Example
apiVersion: v1
kind: Pod
metadata:
name: full-example-pod
spec:
containers:
- name: app
image: my-app:1.0
# Environment variables from ConfigMap
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: log_level
# Environment variables from Secret
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
# ConfigMap volume
volumeMounts:
- name: config
mountPath: /etc/config
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: db-secret
Differences: env vs volumeMounts
Environment Variables (env)
Advantages:
- Simple to use
- Accessible via
$VARIABLE_NAME - Good for simple values
Limitations:
- No complete files
- Size limit
Volumes
Advantages:
- Complete files
- Directory structure
- Good for configuration files
Use cases:
- Configuration files (nginx.conf, etc.)
- Certificates
- Scripts
Best Practices
ConfigMaps
- Use volumes for configuration files
- Use env for simple values
- Do not store sensitive data
Secrets
- Always use readOnly: true for volumes
- Never log secret values
- Use restrictive permissions (defaultMode: 0400)
Summary
In this chapter, you learned:
Environment variables: env and envFrom
Volumes: configMap and secret as volumes
Methods: valueFrom, configMapRef, secretRef
Use cases: env for simple values, volumes for files
Security: readOnly, restrictive permissions for secrets
Next Steps
Chapter 5.4: Best Practices
Lab 5.1: Creating and Using ConfigMaps
Chapter created: December 2024