Archive · Kubernetes

Free TLS Certificates with cert-manager

Issue and renew Let's Encrypt certificates automatically for your ingresses.

1 min read

  • cert-manager 1.6
  • Let's Encrypt
  • Kubernetes 1.23

cert-manager requests certificates, completes the ACME challenge and renews them before expiry.

helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager -n cert-manager \
  --create-namespace --version v1.6.1 --set installCRDs=true

A cluster-wide issuer using Let’s Encrypt (try acme-staging-v02 first to avoid rate limits):

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata: { name: letsencrypt }
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: ops@example.com
    privateKeySecretRef: { name: le-account-key }
    solvers:
      - http01:
          ingress: { class: nginx }

Annotate the Ingress and add a tls section:

metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
spec:
  tls:
    - hosts: [app.example.com]
      secretName: app-tls

Check with kubectl get certificate and kubectl describe challenge. HTTP-01 needs port 80 reachable; wildcard names need DNS-01.