Actualizar ingress.md
This commit is contained in:
60
ingress.md
60
ingress.md
@@ -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/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