Actualizar ingress.md
This commit is contained in:
60
ingress.md
60
ingress.md
@@ -151,7 +151,65 @@ Estructura del repositorio:
|
||||
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/Let’s 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/Let’s 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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user