Actualizar readme.md
This commit is contained in:
161
readme.md
161
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 <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.
|
||||
|
||||
---
|
Reference in New Issue
Block a user