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