# certctl for cert-manager Users You run cert-manager inside Kubernetes and it works well for in-cluster certificates. But you also have VMs, bare-metal servers, network appliances, and legacy systems outside the cluster. cert-manager can't reach those. This guide shows how certctl complements cert-manager to give you unified certificate visibility and automation across your entire infrastructure. ## Not a Replacement cert-manager is the right tool for in-cluster certs. It's tightly integrated with Kubernetes: - Native CRDs (Certificate, ClusterIssuer, Issuer) - Automatic cert injection into Ingress and Service objects - Controller-driven renewal within the cluster **certctl does not replace this.** Instead, it extends your certificate management to everything outside Kubernetes: VMs, bare metal, network appliances, Windows servers, and legacy systems. ## The Problem Your setup: - **cert-manager**: handles all certs in Kubernetes (TLS for Ingress, service-to-service, internal services) - **Everything else**: NGINX/Apache on VMs, HAProxy load balancers on bare metal, network appliances, Windows servers with IIS — these are managed inconsistently. Maybe Certbot cron jobs, maybe manual renewal, maybe deprecated cert files sitting around. Result: - No unified visibility — you don't know when non-Kubernetes certs expire - Renewal failures go unnoticed until the cert is already expired - Audit trail fragmented across multiple tools - Scaling to hundreds of machines becomes impossible ## The Solution Deploy certctl control plane once (Docker Compose, Kubernetes Helm chart, or self-hosted). Deploy agents on your VMs, bare metal, and network appliances. One dashboard shows: - **All cert-manager certs** via discovery scanning (agents find cert-manager-issued certs copied to target machines, or scan the cluster directly) - **All certctl-managed certs** issued by shared issuers (ACME, step-ca, Vault PKI (coming in v2.1), private CA) - **Unified renewal and deployment** across both worlds - **Single pane of glass** with expiration timeline, renewal status, deployment verification, audit trail ## How to Set Up ### 1. Install certctl Control Plane **Option A: Docker Compose** (quickest for evaluation) ```bash cd /opt/certctl docker compose up -d # Dashboard: http://localhost:3000 # API: http://localhost:8080 ``` **Option B: Kubernetes** (recommended for prod) ```bash helm install certctl deploy/helm/certctl/ \ --set auth.apiKey=YOUR_SECURE_KEY ``` ### 2. Deploy Agents to Non-Kubernetes Infrastructure On each VM, bare-metal server, or appliance (via proxy agent): ```bash # Linux amd64 curl -sSL https://github.com/shankar0123/certctl/releases/download/v2.1.0/certctl-agent-linux-amd64 \ -o /usr/local/bin/certctl-agent chmod +x /usr/local/bin/certctl-agent # Config sudo tee /etc/certctl/agent.env > /dev/null <