Instalar un certificado ACME SSL en Kubernetes es ahora un proceso estandarizado y flexible gracias a herramientas maduras como cert-manager y a la amplia compatibilidad de las CA comerciales. Tanto si ejecutas cargas de trabajo de producción detrás de NGINX Ingress, Traefik u otra pasarela, puedes automatizar HTTPS seguro con control total.

Esta guía te mostrará cómo instalar un certificado ACME SSL en Kubernetes utilizando cert-manager. Cubriremos la instalación, la configuración de un emisor con External Account Binding (EAB) y la emisión de certificados para proteger tus servicios de entrada.
Qué necesitarás
Antes de sumergirte, asegúrate:
- Tienes un clúster Kubernetes en funcionamiento (se recomienda v1.23+)
kubectlestá configurado y funcionando- Tienes acceso a tu controlador de entrada (por ejemplo, NGINX, Traefik)
- Tu dominio apunta a la IP pública de tu controlador de entrada
- Tienes credenciales EAB de tu CA compatible con ACME:
- URL del Directorio ACME (por ejemplo, https://acme.example.com/v2/DV)
- Identificador de clave del BEF (KID)
- Clave EAB HMAC
Nota: https://acme.example.com/v2/DV se utiliza a lo largo de esta guía como un marcador de posición de la URL del directorio ACME. Sustitúyelo por el punto final real de tu autoridad de certificación.
Paso 1 – Instalar cert-manager
cert-manager es el cliente ACME nativo de Kubernetes más utilizado. Se ejecuta como un controlador que gestiona la emisión y renovación de certificados.
Instalar mediante Helm (preferible para producción):
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 \
--set installCRDs=true
Espera unos segundos y confirma que todos los pods están funcionando:
kubectl get pods -n cert-manager
Deberías ver tres pods: cert-manager, cert-manager-webhook y cert-manager-cainjector.
Paso 2 – Crear un secreto de Kubernetes para las credenciales EAB
Crea un secreto Kubernetes para almacenar tu clave EAB de forma segura:
kubectl create secret generic acme-eab-secret \
--namespace cert-manager \
--from-literal=eab-kid="YOUR_EAB_KID" \
--from-literal=eab-hmac-key="YOUR_EAB_HMAC_KEY"
Sustitúyelas por tus credenciales reales. Evita copiar y pegar espacios en blanco.
Paso 3 – Definir un ClusterIssuer o Emisor
Ahora, crea un recurso ClusterIssuer (para todos los espacios de nombres) o Issuer (espacio de nombres único) que conecte cert-manager a tu ACME CA utilizando las credenciales EAB.
Aquí tienes un ejemplo de ClusterIssuer YAML:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: acme-issuer
spec:
acme:
server: https://your.acme-server.com/v2/DV
email: [email protected]
privateKeySecretRef:
name: acme-private-key
externalAccountBinding:
keyID: YOUR_EAB_KID
keySecretRef:
name: acme-eab-secret
key: eab-hmac-key
solvers:
- http01:
ingress:
class: nginx
Aplícalo:
kubectl apply -f clusterissuer.yaml
Sustituye ingress.class: nginx por traefik, nginx-internal, o cualquiera que sea tu clase ingress. Puedes encontrar esto en la documentación de tu controlador ingress.
Paso 4 – Crear un recurso de certificado
Una vez que tu ClusterIssuer esté listo, crea un recurso Certificado que indique a cert-manager qué dominio debe asegurar. He aquí un ejemplo:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-ssl-cert
namespace: default
spec:
secretName: my-ssl-cert-tls
issuerRef:
name: acme-issuer
kind: ClusterIssuer
commonName: yourdomain.com
dnsNames:
- yourdomain.com
- www.yourdomain.com
Aplícalo:
kubectl apply -f certificate.yaml
cert-manager utilizará el emisor, resolverá el reto mediante ingress y almacenará el cert emitido como secreto TLS de Kubernetes.
Paso 5 – Haz referencia al Certificado en tu Ingress
Actualiza tu regla de entrada para utilizar el certificado generado:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
cert-manager.io/cluster-issuer: acme-issuer
spec:
tls:
- hosts:
- yourdomain.com
- www.yourdomain.com
secretName: my-ssl-cert-tls
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80
Aplícalo:
kubectl apply -f ingress.yaml
Una vez que cert-manager detecte la anotación, empezará a resolver el reto ACME y emitirá tu cert.
Paso 6 – Verificar el certificado y la renovación automática
Para verificar que todo funcionaba:
kubectl describe certificado mi-ssl-cert
Busca el Certificado emitido correctamente.
Para comprobar la configuración de la renovación, ejecuta
kubectl get certificaterequests
cert-manager gestiona la renovación automáticamente ~30 días antes del vencimiento. Puedes simular una renovación así:
kubectl cert-manager renew my-ssl-cert
Preguntas frecuentes
Configurar ACME SSL en Kubernetes puede parecer un poco abstracto, sobre todo cuando hay que hacer malabarismos con controladores de entrada, Secretos y registros DNS. A continuación, respondemos a algunas preguntas comunes a las que se enfrentan los desarrolladores al instalar certificados ACME en un entorno Kubernetes, tanto si utilizas cert-manager como una configuración alternativa.
¿Puedo utilizar DNS-01 en lugar de HTTP-01?
Sí, cert-manager admite la validación DNS con proveedores como Cloudflare, AWS y Google Cloud DNS. Úsalo si no expones el puerto 80.
¿Está cert-manager preparado para la producción?
Absolutamente. Proporciona SSL para grandes clústeres Kubernetes en empresas y nubes públicas.
¿Puedo utilizar un certificado comodín con ACME en Kubernetes?
Sí, pero los certificados comodín requieren la validación DNS-01, que implica actualizar los registros DNS en lugar de utilizar desafíos HTTP. Confirma que tu proveedor de DNS admite la automatización (a través de la API), y configura el solucionador dns01 en consecuencia en tu configuración de cert-manager.
Palabras finales
Ahora ya sabes cómo instalar un certificado SSL ACME en Kubernetes utilizando cert-manager y una autoridad de certificación compatible con ACME. Esta configuración está totalmente automatizada y es escalable para entornos Kubernetes modernos. Obtendrás HTTPS seguro, renovación automática e integración perfecta con Ingress, todo ello sin salir de tu clúster.
Ahorre un 10% en certificados SSL al realizar su pedido hoy mismo.
Emisión rápida, cifrado potente, 99,99% de confianza del navegador, asistencia dedicada y garantía de devolución del dinero en 25 días. Código del cupón: SAVE10

