Automated Certificate Management
Automatic TLS certificate provisioning and renewal for Kubernetes workloads. Zero manual intervention, predictable URL patterns, and built-in Let's Encrypt integration make HTTPS the default for every deployment.
The Codiac CLI guides you through each command interactively. You don't need to memorize flags, just run the command and the CLI prompts you for what it needs.
The Problem: Manual Certificate Hell
Traditional Kubernetes certificate management:
- Manual cert-manager configuration for each service
- Writing Certificate YAML manifests
- Debugging ACME challenge failures
- Certificate expiration monitoring
- Renewal coordination across teams
- Secret management sprawl
Result: Teams avoid HTTPS in dev/staging, SSL expiration incidents in production, and certificate management becomes a specialized skill.
How Codiac Solves It
1. Automatic Certificate Provisioning
Zero configuration required. When you deploy an asset with ingress enabled, Codiac automatically:
- Creates cert-manager Certificate resources
- Configures Let's Encrypt issuers (staging or production)
- Sets up HTTP-01 ACME challenges
- Provisions TLS secrets
- Annotates ingress rules for cert-manager
- Renews certificates before expiration
# Deploy application - HTTPS configured automatically
codiac asset deploy
# The CLI prompts you to select asset, version, and cabinet
# Map hostname - certificate provisioned within 60 seconds
codiac host map
# The CLI prompts you for hostname and target asset
What happens behind the scenes:
- Codiac creates Kubernetes Ingress with cert-manager annotations
- cert-manager detects new ingress, requests certificate from Let's Encrypt
- Let's Encrypt validates domain ownership via HTTP-01 challenge
- Certificate issued and stored in Kubernetes Secret
- Ingress controller serves TLS using the certificate
- cert-manager auto-renews 30 days before expiration
Time to HTTPS: ~60 seconds from hostname mapping to live certificate.
2. Pattern-Based URL Strategy
Codiac's unique approach: Predictable, deterministic URL patterns eliminate ingress configuration guesswork.
Instead of manually writing Ingress YAML with host rules and paths, you choose a URL strategy that automatically generates URLs for all your assets:
URL Strategy Options
Service-Dot-Cabinet-Dot-Domain
Pattern: <service>.<cabinet>.<domain>
Example: api.prod-backend.mycompany.com
web.prod-backend.mycompany.com
Cabinet-Dot-Domain-Slash-Service
Pattern: <cabinet>.<domain>/<service>
Example: prod-backend.mycompany.com/api
prod-backend.mycompany.com/web
Service-Dot-Domain (simple, custom domains)
Pattern: <service>.<domain>
Example: api.mycompany.com
app.mycompany.com
Multi-Cluster Strategy
Pattern: <cabinet>.<cluster>.<domain>/<service>
Example: prod.us-east.mycompany.com/api
prod.eu-west.mycompany.com/api
Globally Shared Domain (for multi-tenant or highly organized setups)
Pattern: <cabinet>.<enterprise>.<tenant>.<cluster>.<domain>/<service>
Example: prod.payments.acme.us-west.shared.com/api
Why Patterns Matter for Certificates
Consistent patterns = reliable certificates:
- Predictable hostnames mean cert-manager knows exactly what to request
- One certificate per asset+domain prevents certificate collisions
- Automatic wildcard support for cabinet-level certificates when using dot-based strategies
- No manual cert configuration - the pattern defines the certificate scope
Example:
Configure your URL strategy in the Codiac web UI at app.codiac.io, then deploy:
# Deploy services - each gets its own cert automatically
codiac asset deploy
# Select api → api.prod.mycompany.com (cert provisioned)
codiac asset deploy
# Select web → web.prod.mycompany.com (cert provisioned)
codiac asset deploy
# Select jobs → jobs.prod.mycompany.com (cert provisioned)
Certificate details automatically created:
- Secret name:
tls-{tenant}-{enterprise}-{cabinet}-{asset}--host--{domain-with-dashes} - Common Name:
<asset>.<cabinet>.<domain> - Issuer:
letsencrypt-prod(orletsencrypt-stagingfor non-prod) - Challenge: HTTP-01 (automatic via ingress)
3. Cluster-Level TLS Termination
Codiac terminates TLS at the cluster ingress controller, not at a cloud load balancer or gateway. This approach provides:
Advantages:
- Certificate reusability across clouds - same cert works on AWS, Azure, GCP, on-prem
- No cloud vendor lock-in - not tied to AWS ACM, Azure Key Vault, or GCP Certificate Manager
- Unified certificate management - one system for all environments
- Faster certificate issuance - HTTP-01 challenge validation at cluster level
- Lower cost - no cloud load balancer certificate fees
When to use gateway/load balancer termination instead:
- Regulatory compliance requiring hardware security modules (HSMs)
- Extremely high traffic requiring offloading TLS from application layer
- Legacy systems that don't support cluster-level cert-manager
Codiac's default (cluster-level termination) works for 95% of use cases and simplifies operations.
4. Environment-Aware Issuer Selection
Automatic Let's Encrypt environment selection:
| Environment Type | Default Issuer | Rate Limits | Best For |
|---|---|---|---|
| Production | letsencrypt-prod | 50 certs/week | Stable, public-facing services |
| Non-Production | letsencrypt-staging | Unlimited | Dev, staging, testing |
Override for specific cabinets:
Configure certificate issuer settings in the Codiac web UI at app.codiac.io. You can set staging issuers for testing environments and production issuers for customer-facing environments.
Why staging matters:
- Let's Encrypt production has rate limits
- Staging environment = unlimited cert requests (perfect for CI/CD)
- Staging certs are not trusted by browsers (intentional - prevents accidental use)
5. Built-in Certificate Monitoring
Codiac tracks certificate status automatically in the web UI at app.codiac.io:
- Certificate validity period
- Days until expiration
- Renewal status
- ACME challenge status
- Any errors or warnings
Automatic renewal:
- cert-manager renews 30 days before expiration
- Codiac doesn't need to do anything - it's fully automated
- Alerts if renewal fails (via Codiac monitoring integration)
Comparison: Codiac vs Manual cert-manager
| Task | Manual cert-manager | Codiac |
|---|---|---|
| Initial setup | Install cert-manager, configure ClusterIssuers, write Certificate YAML | Automatic (built into cluster initialization) |
| Per-service cert | Write Certificate manifest, reference in Ingress, debug ACME | codiac host map (CLI prompts for domain and asset) |
| Certificate renewal | Automatic (cert-manager handles) | Automatic (cert-manager handles) |
| URL consistency | Manual Ingress host configuration per service | Pattern-based, deterministic URLs |
| Cert collisions | Possible if multiple Certificates request same hostname | Impossible - one cert per asset+domain |
| Monitoring | External tools (Prometheus, custom alerts) | Built into cod cabinet status |
| Multi-cluster | Separate cert-manager per cluster, manual sync | Unified management, automatic replication |
| Configuration reuse | Reconfigure Certificate + Ingress YAML for each new service/environment | Set URL strategy once, auto-applied to all future deployments |
| Configuration overhead | Separate Certificate manifests per service | Zero - pattern generates certs automatically |
Traditional approach: 15 minutes per service × 50 services × 3 environments = 37.5 hours of repeated Certificate + Ingress configuration work.
Codiac approach: 5 minutes one-time URL strategy setup. Future services get HTTPS automatically. Save 37+ hours and eliminate configuration drift.
With Codiac, you set your certificate and ingress strategy once per cabinet/environment. Every new service inherits this configuration automatically - no repeated YAML writing, no duplicated configuration, no documentation debt.
Common Use Cases
Use Case 1: New Application Deployment
Goal: Deploy application with HTTPS in dev, staging, and production.
Steps:
-
Create cabinets for each environment:
codiac cabinet create
# Create dev, staging, and prod cabinets -
Deploy your asset to each cabinet:
codiac asset deploy
# Select asset and target cabinet -
Map hostnames for each environment:
codiac host map
# Map api.dev.mycompany.com → dev cabinet
# Map api.staging.mycompany.com → staging cabinet
# Map api.mycompany.com → prod cabinet
Certificates are provisioned automatically within ~30 seconds of hostname mapping.
Result: HTTPS everywhere, zero manual certificate configuration.
Use Case 2: Multi-Region Deployment
Goal: Same application in US and EU regions with separate certificates.
Steps:
-
Capture or create clusters in each region:
codiac cluster capture
# Capture US cluster, then EU cluster -
Create cabinets in each cluster:
codiac cabinet create
# Create api cabinet in US cluster
# Create api cabinet in EU cluster -
Map hostnames for each region:
codiac host map
# Map api.us.mycompany.com → US cabinet
# Map api.eu.mycompany.com → EU cabinet
Result: Two separate certificates, one per region. Users routed to nearest region.
Use Case 3: Certificate Rotation After Compromise
Goal: Force immediate certificate reissuance.
Steps:
-
Delete existing certificate secret via kubectl:
kubectl delete secret tls-{tenant}-{ent}-production--host--mycompany-com -n <namespace> -
Redeploy the asset to trigger certificate reissuance:
codiac asset deploy
# Select the affected asset and cabinet -
Monitor in the web UI - new certificate issued within 60 seconds
DNS Configuration (User Responsibility)
IMPORTANT: Codiac manages ingress routing and TLS certificates inside the cluster. You must configure DNS separately.
What Codiac does:
- Creates Kubernetes Ingress resources
- Configures TLS termination
- Provisions certificates via Let's Encrypt
- Routes traffic inside the cluster based on hostname/path
What you must do:
- Point DNS A records to your cluster's ingress IP address
- Configure DNS in your domain registrar or DNS provider
Example DNS configuration:
-
Get your cluster's ingress IP from the web UI at app.codiac.io or from your cloud provider console
-
In your DNS provider (Cloudflare, Route53, etc.), create records:
A record: api.mycompany.com → 52.200.192.116
A record: *.prod.mycompany.com → 52.200.192.116
The Codiac web UI shows the required DNS records for all domains mapped to your cabinets.
Troubleshooting
Certificate Not Issuing
Symptoms: Certificate shows pending in web UI for >5 minutes.
Common causes:
- DNS not pointing to cluster - Verify A record points to ingress IP
- Firewall blocking port 80 - HTTP-01 challenge requires port 80 open
- Rate limit hit - Switch to staging issuer temporarily
- Domain not owned - Let's Encrypt validates domain ownership
Debug steps:
# Check cert-manager logs
kubectl logs -n cert-manager -l app=cert-manager
# Check certificate resource status
kubectl describe certificate -n <namespace>
# Verify DNS resolution
dig api.mycompany.com
# Should return your cluster's ingress IP
Certificate Expiring Soon
Symptoms: Certificate shows less than 7 days until expiration.
Codiac behavior:
- cert-manager attempts renewal 30 days before expiration
- If renewal fails, cert-manager retries automatically
- Codiac alerts if renewal blocked
Manual renewal:
Redeploy the asset to trigger certificate reissuance:
codiac asset deploy
# Select the affected asset and cabinet
Mixed Content Warnings (HTTP resources on HTTPS page)
Symptoms: Browser shows "not secure" despite valid certificate.
Cause: Frontend loading HTTP resources (images, scripts, CSS) on HTTPS page.
Solution: Configure SSL redirect in your ingress annotations or update your application to use HTTPS URLs for all resources.
Advanced: Custom Certificate Authorities
Use case: Internal CA for private services (not public Let's Encrypt).
Codiac integrates with cert-manager's Issuer and ClusterIssuer resources. You can configure custom issuers by:
- Creating your
IssuerorClusterIssuerresource in Kubernetes - Configuring your cabinet to use the custom issuer via the web UI
See cert-manager documentation for setting up custom issuers.
Related Documentation
- Multi-Cluster Management - Certificate management across cluster fleets
- Dynamic Configuration - Environment-specific certificate issuers
- Cluster Upgrades - Certificate preservation during upgrades
- CLI: Domain Management - Command reference
- Web UI: Ingress Management - Visual certificate status
FAQ
Q: Do I need to renew certificates manually?
A: No. cert-manager automatically renews certificates 30 days before expiration. Codiac monitors the renewal process.
Q: Can I use wildcard certificates?
A: Yes, but only for DNS-01 challenge type (requires DNS provider API integration). Most users don't need wildcards - pattern-based URLs make individual certs easy.
Q: What happens if Let's Encrypt is down?
A: Existing certificates continue working. New certificate requests queue and retry automatically when Let's Encrypt recovers.
Q: Can I bring my own certificates?
A: Yes. Create a Kubernetes TLS secret manually and reference it in your ingress configuration. Codiac won't overwrite manually-created secrets.
Q: Does Codiac support mTLS (mutual TLS)?
A: Yes, via service mesh integration (Istio, Linkerd). This is separate from ingress TLS and configured at the service level.
Start securing your applications: Deploy your first HTTPS service