bg-tutorials

Cómo instalar un certificado SSL ACME en Kubernetes

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.

Instalar ACME SSL en Kubernetes

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+)
  • kubectl está 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

Una imagen detallada de un dragón en vuelo
Escrito por

Redactor de contenidos experimentado especializado en Certificados SSL. Transformar temas complejos de ciberseguridad en contenido claro y atractivo. Contribuir a mejorar la seguridad digital a través de narrativas impactantes.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.