Automating Certificate Issuance for Ephemeral Container Workloads

There is a fundamental paradox in how many organizations initially secure their Kubernetes environments: deploying containers that live for five minutes while securing them with TLS certificates that ...

Tim Henrich
September 12, 2026
6 min read
25 views

Automating Certificate Issuance for Ephemeral Container Workloads

There is a fundamental paradox in how many organizations initially secure their Kubernetes environments: deploying containers that live for five minutes while securing them with TLS certificates that last for a year.

Traditional Public Key Infrastructure (PKI) was engineered for static infrastructure. You provisioned a bare-metal server, assigned it a static IP address, generated a Certificate Signing Request (CSR), and manually installed a certificate with a one-to-three-year lifespan. Today, machine identities—containers, microservices, and APIs—outnumber human identities by a factor of 40 to 1. When application workloads scale horizontally based on CPU usage, spinning up and terminating hundreds of pods an hour, manual certificate provisioning breaks continuous integration and continuous deployment (CI/CD) pipelines entirely.

Managing digital certificates in containerized environments requires a complete architectural shift. Relying on traditional PKI lifecycles in Kubernetes inevitably leads to secret sprawl, revocation failures, and eventual outages.

The Breakdown of Traditional PKI in Container Environments

When DevOps teams attempt to force legacy PKI practices into cloud-native architectures, several critical failure points emerge.

The Secret Sprawl Problem

Faced with the friction of manual certificate requests, developers often resort to anti-patterns to keep deployment pipelines moving. The most dangerous of these is baking certificates and private keys directly into Docker images or committing them to Git repositories. This creates massive secret sprawl. A compromised registry or repository instantly yields the cryptographic keys needed to intercept traffic or impersonate services. Certificates must never be part of the container image build process; they must be mounted dynamically at runtime.

The Failure of Traditional Revocation

In a static environment, compromised certificates are added to a Certificate Revocation List (CRL) or checked via the Online Certificate Status Protocol (OCSP). In a microservices architecture, these mechanisms collapse.

Downloading megabytes of CRL data into a lightweight, memory-constrained container is highly inefficient. OCSP introduces network latency to every TLS handshake, degrading application performance. If a container is compromised, waiting for a centralized PKI team to revoke the certificate gives attackers ample time to move laterally across the cluster.

The Micro-Lifespan Solution

The modern solution to the revocation problem is to bypass revocation entirely through the use of micro-lifespans. By issuing certificates that expire in 1 to 24 hours, the window of vulnerability is drastically reduced. If a container is compromised and its private key is exfiltrated, the certificate becomes useless almost immediately. This approach shifts the security burden from reactive revocation to proactive, aggressive rotation.

In-Cluster Automation with cert-manager

To achieve micro-lifespans at scale, certificate issuance must occur in milliseconds without human intervention. In the Kubernetes ecosystem, cert-manager has become the de facto standard for this automation.

cert-manager runs as a controller within your cluster, extending the Kubernetes API using Custom Resource Definitions (CRDs). It allows developers to define certificate requirements as code (YAML) alongside their application deployment manifests.

Here is an example of how a development team might configure a cluster to pull short-lived certificates from an internal HashiCorp Vault PKI engine.

First, the cluster administrator defines an Issuer (or ClusterIssuer) that tells cert-manager how to communicate with Vault:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: vault-issuer
spec:
  vault:
    server: https://vault.internal.example.com:8200
    path: pki_int/sign/cluster-dot-local
    auth:
      kubernetes:
        mountPath: /v1/auth/kubernetes
        role: cert-manager
        secretRef:
          name: issuer-token-secret
          key: token

With the issuer configured, a developer can request a certificate for their specific microservice by deploying a Certificate resource:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: payment-service-cert
  namespace: finance
spec:
  secretName: payment-service-tls
  duration: 24h
  renewBefore: 8h
  issuerRef:
    name: vault-issuer
    kind: ClusterIssuer
  commonName: payment-service.finance.svc.cluster.local
  dnsNames:
  - payment-service.finance.svc.cluster.local
  - payment-service

When this YAML is applied, cert-manager automatically generates a private key, creates a CSR, authenticates with Vault, retrieves the signed certificate, and stores it in a Kubernetes Secret named payment-service-tls. The pod can then mount this secret as a volume, ensuring the private key only exists in memory and is never written to persistent disk or the container image.

Establishing Identity with SPIFFE and SPIRE

While cert-manager is excellent for general-purpose certificate injection, securing highly dynamic pod-to-pod communication requires a standardized approach to workload identity.

Historically, security policies relied on network parameters like IP addresses. In Kubernetes, IPs are ephemeral and frequently reused. The Secure Production Identity Framework for Everyone (SPIFFE) is a CNCF standard that solves this by providing cryptographic identities to workloads based on their attributes, rather than their network location.

SPIFFE issues a SPIFFE Verifiable Identity Document (SVID)—typically an X.509 certificate—to every workload. The SPIFFE Runtime Environment (SPIRE) acts as the control plane, attesting the identity of a container based on multiple factors (e.g., "Is this container running in the correct namespace? Was it signed by the correct CI pipeline?").

Once attested, SPIRE pushes a short-lived SVID directly into the container's memory. This allows microservices to mutually authenticate each other (mTLS) using cryptographically verifiable identities, forming the foundation of a true Zero Trust architecture.

Abstracting Complexity with Service Meshes

For organizations running dozens of microservices, managing individual certificate requests—even automated ones—can become an operational burden. Service meshes like Istio and Linkerd abstract certificate management away from the application code entirely.

A service mesh operates by injecting a "sidecar" proxy (such as Envoy) into every container pod. The application container communicates over standard, unencrypted HTTP to its local sidecar. The sidecar then intercepts the traffic, encrypts it via mTLS using certificates provisioned by the mesh's control plane, and routes it to the destination pod's sidecar.

The mesh control plane automatically issues, rotates, and manages certificates for these proxies, often with lifespans as short as one hour. This allows organizations to enforce strict pod-to-pod encryption without requiring developers to write a single line of cryptography code or manage certificate volumes.

Designing a Tiered PKI Architecture

Whether you use cert-manager, SPIRE, or a service mesh, the underlying PKI architecture must be structured securely. Relying on self-signed certificates generated haphazardly across multiple clusters creates blind spots and compliance violations.

A modern container PKI should follow a tiered architecture:

  1. Offline Root CA: The absolute root of trust. This CA is kept highly secure, often in an air-gapped environment or a Hardware Security Module (HSM). It is only brought online to sign Intermediate CAs.
  2. Intermediate CA: Used to sign cluster-specific or environment-specific issuers. If a specific cluster is compromised, its intermediate CA can be revoked without affecting the entire organization.
  3. Cluster/Mesh CA: Ephemeral CAs that live inside the Kubernetes cluster (or within the service mesh control plane). These are responsible for the high-velocity issuance of pod-level certificates.

Consider a global FinTech company migrating to Kubernetes. Initially, they utilized long-lived, manually provisioned wildcard certificates for their microservices. This approach failed a PCI compliance audit, as wildcard certificates provide too broad a blast radius if compromised. By implementing HashiCorp Vault as an Intermediate CA integrated with cert-manager, they were able to issue specific, 24-hour certificates for every individual microservice. This eliminated manual renewal outages, restricted the scope of compromised keys, and achieved the zero-trust encryption required for compliance.

Navigating Regulatory and Industry Mandates

The push for automated, short-lived certificates is not just an architectural preference; it is rapidly becoming a regulatory requirement.

  • PCI DSS v4.0: The latest iteration of the Payment Card Industry Data Security Standard enforces stricter controls over cryptography. It mandates that all internal network traffic containing cardholder data be encrypted. In a Kubernetes environment, this effectively mandates automated mTLS between pods.
    *

Share This Insight

Related Posts