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.