Actualizar readme.md

This commit is contained in:
2025-07-21 21:45:48 +00:00
parent b9201a97ff
commit e2088d38ae

161
readme.md
View File

@ -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 <namespace> create secret tls <nombre-del-secret> \
--cert=certificado.crt \
--key=clave.key
```
* `<namespace>`: donde esté el Ingress (ejemplo: `traefik`)
* `<nombre-del-secret>`: 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.
---