Actualizar ingress.md

This commit is contained in:
xguefer
2025-08-17 12:56:18 +02:00
parent dacafef1e7
commit 9aaaceb723

View File

@@ -151,7 +151,65 @@ Estructura del repositorio:
kubectl apply -k . kubectl apply -k .
``` ```
Esto desplegará el controlador en el namespace `ingress-nginx` y lo dejará listo para enrutar peticiones entrantes hacia los servicios del clú ster. Esto desplegará el controlador en el namespace `ingress-nginx` y lo dejará listo para enrutar peticiones entrantes hacia los servicios del clúster.
### Separacion del trafico en dos redes
Para separar el tráfico **externo** (Internet) del **interno** (VPN), el controlador `ingress-nginx` se publica con **dos Services** de tipo `LoadBalancer` apuntando al *mismo* DaemonSet de NGINX:
**Estructura (repo `kubernetes/ingress-nginx/`):**
```
configmap/configmap.yaml
deployments/deployment.yaml # DaemonSet del controller
ingressclass/ingressclass.yaml # IngressClass: nginx (controller: k8s.io/ingress-nginx)
namespace.yaml
rbac/*
services/
├─ service.yaml # LB público (IP en red 192.168.0.0/24)
└─ service-200.yaml # LB VPN (IP en red 192.168.200.0/24)
```
- **`service.yaml`** → IP pública (ej.: `192.168.0.100`). Aquí entra **ACME/Lets Encrypt** y tráfico externo normal.
- **`service-200.yaml`** → IP **VPN** (ej.: `192.168.200.10`). Solo accesible desde la VPN/CoreDNS interno.
> Ambos Services seleccionan los *mismos* Pods del controller (`selector: app.kubernetes.io/name: ingress-nginx`). Kubernetes permite múltiples Services por el mismo backend.
**Ejemplo de `services/service-200.yaml`**
```yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller-200
namespace: ingress-nginx
spec:
type: LoadBalancer
loadBalancerIP: 192.168.200.10
# Preserva la IP de cliente en NGINX y evita hairpinning innecesario.
externalTrafficPolicy: Local
selector:
app.kubernetes.io/name: ingress-nginx
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
```
**Uso desde los Ingress de las apps:**
- Todos los Ingress usan la *misma* `ingressClassName: nginx`.
- El aislamiento se consigue con la **lista blanca** de orígenes, por ejemplo:
```yaml
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.200.0/24,10.244.0.0/16,192.168.4.0/24"
```
- **ACME/Lets Encrypt** validará por el LB **público** (`service.yaml`).
- El LB **VPN** (`service-200.yaml`) sirve a clientes internos (WireGuard) y al **CoreDNS** interno, que resuelve los FQDN a `192.168.200.10`.
**Notas:**
- Si dependes de la IP real del cliente en logs/reglas, usa `externalTrafficPolicy: Local` en ambos Services (o al menos en el interno). Ajusta el firewall si procede.
--- ---