Saltar al contenido principal

Lab 8.3 - TLS/SSL con Cert-Manager

Objetivos del Lab​

Al final de este laboratorio, usted será capaz de:

  • Instalar cert-manager en el clúster.
  • Configurar un ClusterIssuer para Let's Encrypt.
  • Crear un certificado TLS para un Ingress.
  • Configurar HTTPS con Ingress.
  • Probar el acceso HTTPS seguro.

Duración Estimada​

60-75 minutos

Prerrequisitos​

  • kubectl instalado y configurado.
  • Clúster de Kubernetes con Ingress Controller.
  • Dominio accesible públicamente (o uso de certificados autofirmados para pruebas locales).

Parte 1: Instalación de cert-manager​

cert-manager es un operador de Kubernetes que automatiza la gestión de certificados TLS.

Paso 1.1: Instalar cert-manager​

Instale cert-manager:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml

Espere a que cert-manager esté listo:

kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=90s

Verifique la instalación:

kubectl get pods -n cert-manager

Parte 2: Configuración de un ClusterIssuer​

Un ClusterIssuer define cómo cert-manager obtiene los certificados (Let's Encrypt, autofirmado, etc.).

Paso 2.1: ClusterIssuer para Let's Encrypt (Producción)​

Para un dominio público, cree clusterissuer-letsencrypt.yaml:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com # Reemplace por su correo electrónico
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx

Nota: Para Let's Encrypt, debe tener un dominio público y un Ingress accesible desde Internet.

Paso 2.2: ClusterIssuer Autofirmado (Prueba Local)​

Para un clúster local, utilice un certificado autofirmado:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}

Aplique el ClusterIssuer autofirmado:

kubectl apply -f clusterissuer-selfsigned.yaml

Verifique:

kubectl get clusterissuer

Parte 3: Creación de un Certificado​

Paso 3.1: Crear un Certificado​

Cree certificate-example.yaml:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls-cert
spec:
secretName: app-tls-secret # Nombre del Secret donde se almacenará el certificado
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app.local # Nombre de host para el certificado

Aplique el certificado:

kubectl apply -f certificate-example.yaml

Verifique el estado:

kubectl get certificate
kubectl describe certificate app-tls-cert

Espere a que el certificado esté listo:

kubectl wait --for=condition=ready certificate app-tls-cert --timeout=60s

Verifique que el Secret haya sido creado:

kubectl get secret app-tls-secret

Parte 4: Configuración del Ingress con TLS​

Paso 4.1: Crear un Ingress con TLS​

Cree ingress-tls.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer # Anotación para cert-manager
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret # Referencia al Secret del certificado
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80

Nota: Si utiliza la anotación cert-manager.io/cluster-issuer, cert-manager creará automáticamente el certificado. De lo contrario, haga referencia al Secret creado manualmente.

Aplique el Ingress:

kubectl apply -f ingress-tls.yaml

Parte 5: Prueba del Acceso HTTPS​

Paso 5.1: Configurar el Hostname​

Asegúrese de que app.local apunte a la IP del Ingress Controller en /etc/hosts.

Paso 5.2: Probar HTTPS​

Pruebe el acceso HTTPS:

# Ignorar la verificación del certificado autofirmado
curl -k https://app.local

O en el navegador, acepte el certificado autofirmado (verá una advertencia de seguridad, esto es normal para un certificado autofirmado).


Parte 6: Certificado Automático con Anotación​

También puede dejar que cert-manager cree el certificado automáticamente mediante la anotación en el Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-auto-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret-auto
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80

Cert-manager creará automáticamente el certificado y el Secret.


Parte 7: Limpieza​

Elimine los recursos:

kubectl delete ingress app-ingress-tls
kubectl delete certificate app-tls-cert
kubectl delete clusterissuer selfsigned-issuer
kubectl delete secret app-tls-secret

Para desinstalar cert-manager:

kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml

Resumen del Lab​

En este laboratorio, usted instaló cert-manager, configuró un ClusterIssuer (autofirmado para pruebas locales), creó un certificado TLS y configuró un Ingress con HTTPS. Aprendió a automatizar la gestión de certificados TLS en Kubernetes.


Próximos Pasos​

El último laboratorio de este módulo le mostrará cómo configurar múltiples dominios y virtual hosts con Ingress.

Lab 8.4: Múltiples dominios y Virtual Hosts


Lab creado el: Diciembre 2024