cert-manager vs Let’s Encrypt: What’s the Real Difference?

While both are central to modern HTTPS and TLS automation, cert-manager and Let’s Encrypt operate at completely different layers of the security stack.

The simplest way to understand the difference: Let’s Encrypt is the Certificate Authority (the issuer), while cert-manager is the client (the manager).

Core Comparison Matrix

Featurecert-managerLet’s Encrypt
What is it?An open-source Kubernetes controller / software engineA free, automated, and open Certificate Authority (CA)
Where does it run?Inside your Kubernetes/OpenShift clusterOn public servers operated by the Internet Security Research Group (ISRG)
Primary RoleAutomates certificate requests, challenge validation, and secret rotationGenerates, signs, and revokes public X.509 TLS certificates
Supported CAsLet’s Encrypt, HashiCorp Vault, Venafi, Private CA, Self-SignedN/A (It IS the CA)
ProtocolACME client + Vault/PKI API consumerACME server (implements the RFC 8555 standard)
CostFree (CNCF Graduated Open-Source Project)Free (Non-profit public service)

How They Work Together

cert-manager and Let’s Encrypt are designed to work together via the ACME protocol (Automated Certificate Management Environment):

Plaintext

 ┌────────────────────────────────────────────────────────┐
│ cert-manager │
│ (Runs inside Kubernetes/OpenShift) │
└───────────────────────────┬────────────────────────────┘
│
│ 1. Generates Private Key & CSR
│ 2. Sends ACME Request over HTTPS
▼
┌────────────────────────────────────────────────────────┐
│ Let's Encrypt │
│ (Public CA Infrastructure) │
└───────────────────────────┬────────────────────────────┘
│
│ 3. Issues HTTP-01 / DNS-01 Challenge
▼
┌────────────────────────────────────────────────────────┐
│ cert-manager │
│ 4. Automatically solves challenge (Spins up temporary │
│ route or creates DNS TXT record) │
└───────────────────────────┬────────────────────────────┘
│
│ 5. Validates proof & signs cert
▼
┌────────────────────────────────────────────────────────┐
│ Let's Encrypt │
└───────────────────────────┬────────────────────────────┘
│
│ 6. Returns signed x509 cert chain
▼
┌────────────────────────────────────────────────────────┐
│ cert-manager │
│ 7. Injects cert into Kubernetes Secret (tls.crt/key) │
└────────────────────────────────────────────────────────┘



Key Distinctions

1. Let’s Encrypt is NOT the only issuer cert-manager can use

While Let’s Encrypt is the most common issuer used with cert-manager for public workloads, cert-manager can issue certificates from many other sources:

  • Internal / Enterprise PKI: HashiCorp Vault, Microsoft Active Directory CS, Venafi.
  • Cloud CAs: AWS Private CA, Google Cloud CAS.
  • Self-Signed / Private CA: Local x509 keys stored inside etcd for internal mTLS.

2. Let’s Encrypt requires an ACME Client to function

Let’s Encrypt does not provide a web form or manual button to download certificates. You must use an ACME client to interact with it:

  • On standard Linux servers, you use Certbot or acme.sh.
  • On Kubernetes / OpenShift, you use cert-manager.

3. Public Trust vs. Private Trust

  • Let’s Encrypt issues publicly trusted certificates recognized by every major web browser, phone, and operating system out of the box.
  • cert-manager itself has no inherent trust authority—it inherits trust based on whichever CA signed the certificate it retrieved.

Summary Rule of Thumb

  • Use Let’s Encrypt when you need free, publicly trusted SSL/TLS certificates for external domain names (e.g., [https://my-app.example.com](https://my-app.example.com)).
  • Use cert-manager inside Kubernetes/OpenShift to automate the process of asking Let’s Encrypt (or your internal Vault CA) for those certificates, installing them into TLS Secrets, and automatically renewing them before they expire.

Leave a Reply