cert-manager — Automated X.509 Certificate Management for Kubernetes
cert-manager is a cloud-native controller that issues, renews and rotates TLS certificates from Let's Encrypt, HashiCorp Vault, a private PKI or any ACME-compatible issuer, entirely through Kubernetes resources.
What it is
cert-manager is a cloud-native Kubernetes controller that automates the issuance, renewal, and rotation of X.509 TLS certificates. It integrates with certificate authorities like Let's Encrypt, HashiCorp Vault, Venafi, and any ACME-compatible issuer. Certificates are managed through Kubernetes custom resources, making TLS configuration declarative and version-controlled.
The tool targets platform engineers and DevOps teams who manage HTTPS endpoints on Kubernetes and want to eliminate manual certificate management.
How it saves time or tokens
Without cert-manager, teams manually generate certificates, track expiration dates, and coordinate renewal across services. cert-manager automates the entire lifecycle: it requests certificates when Ingress resources are created, renews them before expiration, and stores them as Kubernetes Secrets. This eliminates certificate-related outages caused by forgotten renewals and reduces the operational overhead of TLS management to zero ongoing effort.
How to use
- Install cert-manager with Helm:
helm repo add jetstack https://charts.jetstack.io && helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager --create-namespace \
--set crds.enabled=true
- Create a ClusterIssuer for Let's Encrypt:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
- Annotate your Ingress to request a certificate:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- app.example.com
secretName: app-tls
Example
# Request a certificate directly via Certificate resource
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: api-cert
namespace: production
spec:
secretName: api-tls
renewBefore: 360h # renew 15 days before expiry
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- api.example.com
- api-v2.example.com
Related on TokRepo
- DevOps tools directory -- Infrastructure automation and CI/CD tools
- Security tools -- Certificate and security management solutions
Common pitfalls
- Using the Let's Encrypt staging server for testing but forgetting to switch to production; staging certificates are not trusted by browsers
- DNS-01 challenges require cloud provider credentials with DNS write access; missing IAM permissions cause silent validation failures
- Rate limits on Let's Encrypt production (50 certificates per registered domain per week) can block high-volume issuance
Frequently Asked Questions
cert-manager supports Let's Encrypt (ACME), HashiCorp Vault, Venafi, and any CA that implements the ACME protocol. It also supports self-signed certificates and custom CA issuers for internal PKI. Third-party issuers can be added via the external issuer interface.
cert-manager monitors certificate expiration dates and triggers renewal automatically before the certificate expires. The renewBefore field controls how early renewal starts. By default, certificates are renewed when two-thirds of their validity period has elapsed.
Yes. cert-manager works with Nginx, Traefik, HAProxy, Istio, and any Ingress controller that reads TLS secrets from Kubernetes. The integration is through annotations on Ingress resources or direct Certificate custom resources.
An Issuer is namespace-scoped and can only issue certificates within its namespace. A ClusterIssuer is cluster-wide and can issue certificates in any namespace. Use ClusterIssuer for shared CAs like Let's Encrypt, and Issuer for namespace-specific private CAs.
Yes, but wildcard certificates require DNS-01 challenge validation, not HTTP-01. You need to configure a DNS provider (Route53, CloudFlare, Google Cloud DNS, etc.) with appropriate API credentials for cert-manager to create the required TXT records.
Citations (3)
- cert-manager GitHub— cert-manager automates certificate lifecycle on Kubernetes
- cert-manager Documentation— Supports ACME, Vault, Venafi, and custom issuers
- Let's Encrypt Rate Limits— Let's Encrypt rate limits for production use
Related on TokRepo
Discussion
Related Assets
Miniflux — Minimalist Self-Hosted Feed Reader
Miniflux is an opinionated, minimalist RSS and Atom feed reader written in Go that focuses on simplicity, speed, and content readability.
Kanboard — Minimalist Kanban Project Management
Kanboard is a free and open-source Kanban project management tool focused on minimalism, productivity, and getting things done without unnecessary complexity.
Homer — Static Server Dashboard with YAML Configuration
Homer is a dead-simple static dashboard for your server services, configured entirely through a single YAML file with no database or backend required.