cert-manager Integration

What cert-manager doesn't do

cert-manager is excellent at automating certificate issuance and renewal in Kubernetes. It is not a governance tool. It has no concept of who approved a cert, whether a domain is authorized, or what your auditors will need next quarter. CertForge fills that gap — as a first-class cert-manager external issuer.

What cert-manager does well

  • Automates certificate issuance from ACME, Vault, AWS PCA, and more
  • Renews expiring certs automatically (configurable ahead-of-expiry)
  • Stores certificates as Kubernetes Secrets, ready for pods to mount
  • Deep Kubernetes integration — CRDs, RBAC, webhook validation
  • Wide ecosystem: Istio, Knative, Gateway API, Ingress controllers

What cert-manager leaves open

  • No approval workflow — any cluster user with RBAC can request any cert
  • No domain authorization — nothing stops someone requesting certs for *.internal.prod
  • No audit trail for compliance — "who approved this cert?" has no answer
  • No centralized inventory — cert visibility stops at the cluster boundary
  • No cross-CA policy enforcement — issuance rules live in the issuer config, not a governance layer

How the integration works

CertForge implements the cert-manager external issuer API. Your Certificate CRDs stay exactly the same. The only change is issuerRef pointing to a CertForgeIssuer instead of a ClusterIssuer.

1

Install the certforge-issuer controller in your cluster

# Using Helm
helm repo add certforge https://charts.certgov.app
helm install certforge-issuer certforge/certforge-issuer \
  --namespace cert-manager \
  --set apiKey=<your-api-key> \
  --set certforgeUrl=https://app.certgov.app
2

Create a CertForgeIssuer that maps to a Trust Profile

apiVersion: certforge.io/v1alpha1
kind: CertForgeIssuer
metadata:
  name: production-issuer
  namespace: cert-manager
spec:
  trustProfileRef: k8s-internal-tls # defined in CertForge Platform
3

Your Certificate manifests stay the same — just change issuerRef

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: api-gateway-tls
spec:
  secretName: api-gateway-tls-secret
  dnsNames:
    - api.internal.example.com
  issuerRef:
    name: production-issuer # was: letsencrypt-prod
    group: certforge.io
4

CertForge intercepts the request, enforces policy, routes for approval

The controller forwards each CertificateRequest to CertForge. If the request matches an auto-approve policy in the Trust Profile, it is issued immediately. If it requires human review, the request enters an approval queue — approvers get notified, act in the Platform UI, and cert-manager receives the signed cert once approved. Rejections propagate back as cert-manager conditions so Kubernetes events show the reason.

What you get

Policy enforcement

Trust Profiles define which domains are allowed, which CA to use, max validity, and whether human approval is required. No cert leaves without matching a profile.

Full audit trail

Every CertificateRequest is logged: cluster, namespace, requestor identity, policy matched, approver, timestamp. Exportable to Splunk, Datadog, or Elastic.

Central inventory

Certs issued through CertForge appear in the unified cert inventory — alongside certs from other environments, with expiry alerts and renewal status.

Human approval workflows

Configure approvers by domain pattern. A request for *.prod.example.com can require security team sign-off while *.dev.* auto-approves.

Denial propagation

When a human rejects a request, CertForge annotates the cert-manager Certificate resource to stop the retry loop. cert-manager won't keep re-submitting.

Framework reports

Cert activity in Kubernetes is included in PCI-DSS, SOC 2, and ISO 27001 attestation reports. Auditors see governance evidence across all cert sources in one report.

Works across clusters

One CertForge organization can receive requests from multiple clusters. Each cluster has its own CertForgeIssuer resource mapping to the same (or different) Trust Profiles. The unified inventory shows which cluster each cert came from, and approval workflows can route based on cluster labels.

Common questions

Does this replace cert-manager or work alongside it?

Alongside it. cert-manager keeps doing what it does best — managing certificate lifecycle in Kubernetes. CertForge adds the governance layer on top. Your Certificate CRDs, renewal logic, and Secret delivery remain cert-manager's job.

What happens to auto-renewal in cert-manager?

Auto-renewal works normally. When cert-manager submits a renewal CertificateRequest, CertForge processes it through the same policy engine. You can configure Trust Profiles to auto-approve renewals that match the original request (same domains, same CA), so renewal is still frictionless.

What CA does CertForge use to sign certificates?

You configure the CA in the Trust Profile. Options include CertForge's built-in internal CA, your own private CA (via CA connector), or external ACME CAs (Let's Encrypt, ZeroSSL, DigiCert). Each Trust Profile can use a different CA, so dev and prod can issue from different roots.

Does this work with CMCTL and the cert-manager CLI?

Yes. The certforge-issuer implements the standard external issuer contract. CMCTL, kubectl cert-manager, and any tool that reads CertificateRequest status work normally.

Add governance to your cluster today

Install the issuer, connect a Trust Profile, and start reviewing cert requests in the Platform UI — no changes to your existing Certificate manifests.

certforge-issuer is open source — Apache 2.0 license.