Cert-Manager
-
Implementar RBAC adecuado: Restringir el acceso a Issuers y secretos de certificados usando Kubernetes RBAC para prevenir la creación de certificados no autorizados
-
Versionar configuraciones: Almacenar manifiestos de Certificate e Issuer en Git para rastrear cambios y habilitar flujos de trabajo GitOps
-
Usar issuers separados por entorno: Crear diferentes issuers para desarrollo/staging/producción para aislar credenciales y prevenir problemas de certificados entre entornos
-
Habilitar inyección de CA para webhooks: Usar
cert-manager.io/inject-ca-fromannotation para inyectar automáticamente paquetes CA en configuraciones de webhook
| Problema | Solución |
|---|---|
| Certificate stuck in "Pending" | Check certificate request: kubectl describe certificaterequest <name>. Look for ACME challenge failures or issuer configuration errors |
| ACME HTTP-01 challenge failing | Verify ingress is accessible: curl http://<domain>/.well-known/acme-challenge/test. Check ingress class matches solver configuration |
| DNS-01 challenge timeout | Confirm DNS provider credentials: kubectl get secret <dns-secret> -o yaml. Verify DNS propagation: dig TXT _acme-challenge.<domain> |
| "Too many certificates" rate limit | Cambie al servidor de pruebas de Let's Encrypt o espere 7 días. Verifique los límites de tasa: https://letsencrypt.org/docs/rate-limits/ |
| Certificate not renewing automatically | Check renewBefore setting and cert-manager logs: kubectl logs -n cert-manager deployment/cert-manager. Verify controller is running |
| Webhook connection failures | Verify webhook service is running: kubectl get svc -n cert-manager. Check webhook certificate validity: cmctl check api |
| CA injection not working | Ensure cainjector is running: kubectl get pods -n cert-manager. Verify annotation syntax: cert-manager.io/inject-ca-from: namespace/certificate |
| Certificate shows "Ready=False" | Get detailed status: cmctl status certificate <name>. Check events: kubectl get events --field-selector involvedObject.name=<cert-name> |
| Order stuck in "Pending" | Delete order to retry: kubectl delete order <order-name>. Certificate controller will create new order automatically |
| Secret not created after certificate ready | Check secret name matches secretName in Certificate spec. Verify namespace: kubectl get secret <name> -n <namespace> |
| Wildcard certificate validation fails | Asegúrese de que el solucionador DNS-01 esté configurado (HTTP-01 no admite comodines). Verifique los permisos del proveedor DNS para la creación de registros TXT |
| Certificate shows wrong issuer | Delete certificate request: kubectl delete certificaterequest <name>. Update Certificate spec with correct issuerRef |
| High memory usage | Reduce certificate count or increase resources: kubectl set resources deployment cert-manager -n cert-manager --limits=memory=512Mi |
| Duplicate certificates created | Check for multiple Certificate resources with same secretName. Remove duplicates to prevent conflicts |
| ACME account registration fails | Verificar formato de correo electrónico en la especificación del emisor. Comprobar que la URL del servidor ACME sea correcta. Revisar los registros de cert-manager para obtener mensajes de error detallados |
Resolución de problemas¶
# Complete troubleshooting workflow
kubectl describe certificate <cert-name>
kubectl get certificaterequest -l cert-manager.io/certificate-name=<cert-name>
kubectl describe certificaterequest <request-name>
kubectl get order
kubectl describe order <order-name>
kubectl get challenge
kubectl describe challenge <challenge-name>
kubectl logs -n cert-manager deployment/cert-manager --tail=100
```### Secuencia de Comandos de Depuración
```bash
# Search for specific certificate errors
kubectl logs -n cert-manager deployment/cert-manager | grep "certificate=<cert-name>"
# Find ACME challenge errors
kubectl logs -n cert-manager deployment/cert-manager | grep "challenge"
# Check for rate limit errors
kubectl logs -n cert-manager deployment/cert-manager | grep "rate limit"
# Monitor certificate renewal attempts
kubectl logs -n cert-manager deployment/cert-manager -f | grep "renewal"