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
| Feature | cert-manager | Let’s Encrypt |
| What is it? | An open-source Kubernetes controller / software engine | A free, automated, and open Certificate Authority (CA) |
| Where does it run? | Inside your Kubernetes/OpenShift cluster | On public servers operated by the Internet Security Research Group (ISRG) |
| Primary Role | Automates certificate requests, challenge validation, and secret rotation | Generates, signs, and revokes public X.509 TLS certificates |
| Supported CAs | Let’s Encrypt, HashiCorp Vault, Venafi, Private CA, Self-Signed | N/A (It IS the CA) |
| Protocol | ACME client + Vault/PKI API consumer | ACME server (implements the RFC 8555 standard) |
| Cost | Free (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-manageritself 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-managerinside 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.
