Course contentsShow
← Docker, Kubernetes & CI/CD
Lesson 645 of 8029. CI/CD Pipeline EngineeringFree lesson

Configuring Cross-Environment Configuration Management

Manage environment-specific variables and secrets dynamically to ensure the same container image can be promoted safely across diverse cluster configurations.

In this lesson, you will learn how to decouple your containerized application logic from environment-specific configurations to ensure a single, immutable image can be promoted safely from staging to production.

The Problem: The "Hardcoded Trap"

In an ideal CI/CD pipeline, the container image built during the integration phase is the exact same binary that runs in production. However, applications often require environment-specific data—such as database URLs, feature flags, or API endpoints. If you bake these values into the container at build time, you violate the principle of immutability and create a security risk where secrets might be leaked inside the image layers.

The Solution: Externalized Configuration

To achieve "build once, deploy anywhere," we treat the container as a generic execution environment and inject configurations at runtime. By separating configuration from the image, you enable your CI/CD pipeline to promote the same artifact across clusters without re-compilation.

In Kubernetes, we handle this by using ConfigMaps for non-sensitive data and Secrets (ideally injected via external vault providers as discussed in previous lessons) for sensitive tokens. The application code should be designed to read these inputs via environment variables or mounted configuration files.

Consider this Deployment manifest approach:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: app-container
        image: my-registry/my-app:1.2.3 # Same image used in all environments
        env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: db_host
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: api_key

Operational Strategy

When using tools like Helm or Kustomize within your multi-stage pipeline, you define "base" configurations that remain constant and "overlays" that define the environment-specific differences. During deployment, the CI/CD orchestrator maps the environment context to the appropriate configuration set. This ensures that the application remains portable while the surrounding infrastructure handles the unique requirements of the target environment.

Key Takeaway: Never bake environment-specific configuration into your container images; instead, inject them at runtime using Kubernetes primitives or vault-backed secret providers to maintain absolute image immutability.