From e2088d38ae0efbf4ce12ecef03dd05efa9ffb62c Mon Sep 17 00:00:00 2001 From: xavor Date: Mon, 21 Jul 2025 21:45:48 +0000 Subject: [PATCH] Actualizar readme.md --- readme.md | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) diff --git a/readme.md b/readme.md index e36472e..ba15b0c 100644 --- a/readme.md +++ b/readme.md @@ -447,3 +447,164 @@ kubectl get pods -n nfs-provisioner ``` --- + +# 12. Instalación de Traefik y cert-manager (Ingress + TLS) + +Traefik actúa como router de aplicaciones dentro de tu clúster, exponiendo servicios HTTP/HTTPS en LAN o Internet. Cert-manager se encarga de gestionar automáticamente los certificados TLS (Let's Encrypt, CA propia, etc.), pero también puedes usar un certificado comprado (wildcard) y aplicarlo a múltiples dominios. + +--- + +## a) Instala Traefik como Ingress Controller + +1. Prepara tu carpeta de manifiestos (`traefik/`) con recursos desglosados: + + * Namespace, ServiceAccount, RBAC + * Deployment o DaemonSet (según tu preferencia) + * Service tipo `LoadBalancer` (usará MetalLB) + * IngressClass (si lo quieres explícito) + * ConfigMap con parámetros de Traefik + +2. Aplica los manifiestos con Kustomize: + +```bash +kubectl apply -k traefik/ +``` + +3. Comprueba el estado y la IP asignada: + +```bash +kubectl get pods -n traefik +kubectl get svc -n traefik +``` + +* El Service principal (`traefik` o `traefik-lb`) debería tener una IP del pool de MetalLB (`EXTERNAL-IP`). + +--- + +## b) Instala cert-manager (opcional si solo usas certificados propios) + +1. Crea el namespace: + +```bash +kubectl apply -f cert-manager/namespace.yaml +``` + +2. Aplica el manifiesto oficial de cert-manager: + +```bash +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml +``` + +3. (Opcional) Crea los ClusterIssuer para Let's Encrypt (staging y producción): + +```bash +kubectl apply -f cert-manager/clusterissuer-staging.yaml +kubectl apply -f cert-manager/clusterissuer-prod.yaml +``` + +4. Comprueba los pods: + +```bash +kubectl get pods -n cert-manager +``` + +* Espera a que estén todos en estado `Running`. + +--- + +## c) **¿Cómo usar un certificado SSL wildcard comprado?** + +Si has adquirido un certificado wildcard (ej: `*.miempresa.com`) y tienes el `.crt` (certificado), `.key` (clave privada) y, opcionalmente, el CA bundle: + +1. **Crea un Secret TLS en el namespace donde están tus Ingress:** + +```bash +kubectl -n traefik create secret tls wildcard-cert \ + --cert=certificado_wildcard.crt \ + --key=clave_wildcard.key +``` + +* Si necesitas añadir la cadena de CA, concaténala al `.crt`: + + ```bash + cat wildcard.crt ca-bundle.crt > fullchain.crt + kubectl -n traefik create secret tls wildcard-cert --cert=fullchain.crt --key=clave.key + ``` + +2. **Referéncialo en tus Ingress:** + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ejemplo-wildcard + namespace: traefik +spec: + ingressClassName: traefik + tls: + - hosts: + - app1.miempresa.com + - app2.miempresa.com + secretName: wildcard-cert + rules: + - host: app1.miempresa.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: servicio1 + port: + number: 80 + - host: app2.miempresa.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: servicio2 + port: + number: 80 +``` + +* Todos los Ingress que referencien `secretName: wildcard-cert` usarán ese mismo certificado SSL, y funcionarán para todos los subdominios cubiertos por el wildcard. + +--- + +## d) ¿Dónde se guardan los certificados en Kubernetes? + +Los certificados (wildcard, Let's Encrypt, CA propia…) se almacenan como objetos `Secret` de tipo `kubernetes.io/tls` en el namespace correspondiente. No están en disco ni en ninguna ruta específica del pod o nodo. Traefik accede al Secret por nombre, a través de la API de Kubernetes. + +Puedes ver los secrets así: + +```bash +kubectl get secrets -n traefik +``` + +El contenido real está en la base de datos interna de Kubernetes (etcd). + +--- + +## e) **Cómo crear un Secret TLS a partir de tus archivos de certificado** + +Para cualquier certificado SSL (wildcard, multiSAN, CA interna, etc.), el comando general es: + +```bash +kubectl -n create secret tls \ + --cert=certificado.crt \ + --key=clave.key +``` + +* ``: donde esté el Ingress (ejemplo: `traefik`) +* ``: el que quieras (ejemplo: `wildcard-cert`) +* `--cert`: debe incluir el certificado y, opcionalmente, la cadena completa de CA (fullchain) +* `--key`: la clave privada + +**¿Qué hace este comando?** + +* Sube el contenido de los archivos al clúster y crea un objeto `Secret` de tipo `kubernetes.io/tls`. +* Kubernetes lo guarda cifrado en etcd y lo inyecta a los pods/controllers cuando un Ingress lo solicita. + +--- \ No newline at end of file