cert-manager requests TLS certificates, stores them in Secrets, and renews them before they expire, so your ingress always has a valid certificate without requiring you to track expiry dates. Syself Autopilot does not provide it; you install it yourself as a normal workload. ## Install and verify Install the chart with its CRDs Install cert-manager and its custom resources into a dedicated namespace: ```console $ 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 ``` The cert-manager webhook sits on the API path for every issuer and `Certificate` request so it is an important component that needs spreading, so run two of it with `--set webhook.replicaCount=2 --set webhook.podDisruptionBudget.enabled=true` and admission survives losing a node. Replicas alone do not prevent outages. Set up alerting for two critical failure conditions: - **Controller and webhook availability:** Alert if the cert-manager controller or webhook deployments become unready or crash-loop, which halts automated renewals and blocks admission validation for new resources. - **Impending certificate expiry:** A stalled renewal restarts no pod and fails no deployment, staying invisible until a certificate expires and your ingress serves an invalid chain. Alert on remaining certificate validity (for example, when under 14–21 days remain) as described in [Rotate and renew certificates](/docs/hetzner/apalla/network/dns-certs/certificate-rotation-and-renewal#alert-before-expiry). Verify the webhook is healthy cert-manager runs an admission webhook that validates every issuer and `Certificate` you create, and nothing functions until it is ready. Check that its deployments are available before you create an issuer: ```console $ kubectl get pods -n cert-manager NAME READY STATUS RESTARTS AGE cert-manager-... 1/1 Running 0 2m cert-manager-cainjector-... 1/1 Running 0 2m cert-manager-webhook-... 1/1 Running 0 2m ``` > [!TIP] > If a `Certificate` or `Issuer` you create fails validation, hangs without status updates, or shows no events, inspect the `cert-manager-webhook` pod logs and health first. ## What certificates can cert-manager issue? cert-manager manages standard X.509 TLS certificates across several trust models, domains, and application use cases: - **Public web certificates:** Automated, browser-trusted TLS certificates via Let's Encrypt or ZeroSSL (ACME) for public-facing Ingresses and APIs. Supports single domains, multi-domain SANs, and wildcard certificates (`*.example.com` validated through DNS-01 challenges). - **Internal and private PKI:** Certificates signed by an internal root or intermediate CA stored in a Kubernetes Secret, or delegated to HashiCorp Vault or enterprise PKI (such as Venafi or AWS Private CA). Used for cluster-internal microservices, zero-trust architectures, and private endpoints. - **Client and mutual TLS (mTLS):** Client certificates used for pod-to-pod authentication, database connectivity, or service mesh mutual TLS. - **Self-signed and bootstrap certificates:** Ephemeral certificates generated directly by the cluster without an external authority, ideal for local development, testing, or bootstrapping an internal root CA. ## Choose a certificate source An issuer tells cert-manager where certificates come from, and the kind you pick decides who trusts the result. Settle that before you decide where the issuer lives. | Issuer type | Issues | Use it for | | ------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------- | | `acme` | Publicly trusted certificates from Let's Encrypt or another ACME CA | Internet-facing ingress hosts | | `ca` | Certificates signed by a CA key pair you hold in a Secret | An internal PKI whose root you distribute to your own clients | | `selfSigned` | Certificates signed by their own key | Bootstrapping a `ca` issuer, and mTLS between workloads you control | | `vault` | Certificates from a Vault PKI secrets engine | Clusters that already issue from Vault | | `venafi` | Certificates through Venafi TPP or Venafi Cloud | Organizations with a central enterprise PKI | External issuers such as AWS Private CA and Google Certificate Authority Service plug in as separate controllers with their own CRDs, and follow the same scoping rules as the built-in kinds. Most clusters need only `acme`, which produces the browser-trusted certificate an ingress serves. See [set up a Let's Encrypt ClusterIssuer](/docs/hetzner/apalla/network/dns-certs/lets-encrypt-clusterissuer). ## Choose between Issuer and ClusterIssuer cert-manager supports both namespaced and cluster-scoped certificate authorities depending on your isolation requirements: - **`Issuer` (namespaced):** Scoped strictly to the namespace where it is defined. Use an `Issuer` to isolate credentials, internal PKIs, or private CA configurations within a specific tenant or application boundary. - **`ClusterIssuer` (cluster-wide):** Accessible from any namespace across the cluster. Use a `ClusterIssuer` for shared services, such as a cluster-wide Let's Encrypt setup for public HTTP/S Ingresses. For standard public web applications, you can configure a cluster-wide Let's Encrypt `ClusterIssuer` so any Ingress can request TLS certificates automatically without duplicating issuer configurations per namespace. See [set up a Let's Encrypt ClusterIssuer](/docs/hetzner/apalla/network/dns-certs/lets-encrypt-clusterissuer). cert-manager, a `ClusterIssuer`, and DNS wiring are a small but real operational responsibility. Syself can set this up for you and keep it running, from a one-time setup to a fully managed arrangement. Contact [contact@syself.com](mailto:contact@syself.com). > [!NOTE] > When you upgrade cert-manager, upgrade its CRDs to match the chart version. A chart running against older CRDs is a common cause of certificates that silently stop reconciling. ## Where to go next - [Set up a Let's Encrypt ClusterIssuer](/docs/hetzner/apalla/network/dns-certs/lets-encrypt-clusterissuer) - [Rotate and renew certificates](/docs/hetzner/apalla/network/dns-certs/certificate-rotation-and-renewal) - [Security on Syself Autopilot](/docs/hetzner/apalla/concepts/ownership/security-model)