Overview
The exchange infrastructure uses cert-manager to automatically provision and manage TLS/SSL certificates from Let’s Encrypt. This ensures secure HTTPS connections for all external-facing services without manual certificate management.Prerequisites
Before setting up TLS certificates, ensure you have:- Helm installed for deploying cert-manager
- NGINX Ingress Controller deployed in your cluster
- DNS properly configured pointing your domain to the cluster’s ingress IP
- cert-manager installed via Helm
Installation
Install cert-manager
Deploy cert-manager using Helm:Configuration
ClusterIssuer Setup
A ClusterIssuer is a cluster-wide resource that issues certificates using the ACME protocol with Let’s Encrypt. Createissuer.yml:
email: Email for Let’s Encrypt expiration noticesserver: Let’s Encrypt production ACME endpointprivateKeySecretRef: Kubernetes Secret storing the ACME account private keysolvers: HTTP-01 challenge using NGINX ingress controller
Verify ClusterIssuer
Check the ClusterIssuer status:Certificate Provisioning
Automatic Certificate with Ingress
The recommended approach is to request certificates directly in your Ingress resource using annotations:cert-manager.io/cluster-issuer: letsencrypt-prod: Tells cert-manager to use the ClusterIssuertls.secretName: exchange-tls: The Secret where the certificate will be stored
Manual Certificate Resource (Optional)
For more control, you can create a standalone Certificate resource:When defining certificates in Ingress annotations, you don’t need a separate Certificate resource. The Ingress annotation method is simpler and recommended for most use cases.
Certificate Validation
HTTP-01 Challenge
The ClusterIssuer uses the HTTP-01 challenge method to prove domain ownership:- cert-manager creates a temporary Ingress route
- Let’s Encrypt makes an HTTP request to
http://your-domain/.well-known/acme-challenge/<token> - cert-manager responds with the validation token
- Let’s Encrypt verifies the response and issues the certificate
- Port 80 must be accessible from the internet
- DNS must be properly configured
- NGINX Ingress Controller must be running
Monitoring and Verification
Check Certificate Status
Inspect TLS Secret
View the generated certificate secret:Certificate Renewal
cert-manager automatically renews certificates before they expire (typically 30 days before expiration). Monitor renewal status:Troubleshooting
Certificate Not Issuing
-
Check ClusterIssuer status:
-
Check Certificate events:
-
Check CertificateRequest:
-
Check cert-manager logs:
Common Issues
DNS not configured:- Ensure your domain points to the ingress IP
- Verify with
nslookup your-domain.com
- Check firewall rules
- Verify LoadBalancer service is running
- Ensure
ingress.class: nginxmatches your ingress controller
Cleaning Up Failed Certificates
If a certificate fails to issue, clean up and retry:Production Considerations
Rate Limits
Let’s Encrypt has rate limits:- 50 certificates per registered domain per week
- 5 duplicate certificates per week
Wildcard Certificates
For wildcard certificates (e.g.,*.example.com), use DNS-01 challenge instead of HTTP-01:
Certificate Backup
Backup TLS secrets for disaster recovery:Resources
- cert-manager Documentation
- Let’s Encrypt Documentation
- NGINX Ingress Controller
- Tutorial: cert-manager with Kubernetes
Next Steps
Sealed Secrets
Learn about secure secret management
Best Practices
Security hardening guidelines

