From e29fd152d8560db0d33f73148df26ce0e2b81a33 Mon Sep 17 00:00:00 2001 From: xguefer Date: Mon, 11 Aug 2025 00:49:24 +0200 Subject: [PATCH] Actualizar redes_internet.md --- redes_internet.md | 76 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/redes_internet.md b/redes_internet.md index e8d4c1c..150b85a 100644 --- a/redes_internet.md +++ b/redes_internet.md @@ -160,7 +160,7 @@ MetalLB permite asignar IPs flotantes de tu red LAN a servicios `LoadBalancer`, --- -## 2.1 Instala MetalLB +## 2.1 Instalar MetalLB ```bash kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml @@ -170,9 +170,55 @@ Esto crea el namespace `metallb-system` y despliega los pods necesarios. --- -## 2.2 Define un pool con múltiples rangos +## 2.2 Habilitar `strictARP` en kube-proxy (obligatorio en L2) -En lugar de crear múltiples `IPAddressPool` por separado, puedes declarar varios rangos de IP en un **solo** `IPAddressPool`. Esto simplifica la gestión. +Para evitar problemas de **ARP flapping** y garantizar que solo el nodo que anuncia la IP responda a las peticiones ARP, es necesario activar `strictARP` en kube-proxy. + +```bash +kubectl -n kube-system edit configmap kube-proxy +``` + +En la sección `config.conf` busca la línea `strictARP` y cámbiala a: + +```yaml +strictARP: true +``` + +Guarda y reinicia kube-proxy: + +```bash +kubectl -n kube-system rollout restart daemonset kube-proxy +``` + +--- + +## 2.3 Eliminar la etiqueta que excluye los nodos de anunciar LoadBalancer + +Por defecto, Kubernetes etiqueta los nodos `control-plane` con: + +```text +node.kubernetes.io/exclude-from-external-load-balancers +``` + +Esto impide que MetalLB anuncie servicios desde esos nodos. + +Para eliminarla de todos los nodos: + +```bash +kubectl label node --all node.kubernetes.io/exclude-from-external-load-balancers- +``` + +Verifica que ya no aparece: + +```bash +kubectl get nodes -L node.kubernetes.io/exclude-from-external-load-balancers +``` + +--- + +## 2.4 Definir un pool con múltiples rangos + +En lugar de crear múltiples `IPAddressPool` por separado, puedes declarar varios rangos de IP en un **solo** `IPAddressPool`. **Ejemplo: `metallb/ipaddresspool.yaml`** @@ -215,9 +261,9 @@ kubectl apply -k metallb/ --- -## 2.3 Asignar una IP concreta al Service (`loadBalancerIP`) +## 2.5 Asignar una IP concreta al Service (`loadBalancerIP`) -Puedes indicar directamente la IP deseada usando el campo `loadBalancerIP`, y MetalLB la asignará si pertenece a uno de los rangos definidos. +Puedes indicar directamente la IP deseada usando el campo `loadBalancerIP`. ### ✅ Ejemplo 1: Asignación explícita con `loadBalancerIP` @@ -236,8 +282,6 @@ spec: loadBalancerIP: 192.168.1.105 # IP concreta del pool ``` -No es necesario usar anotaciones si la IP está incluida en el `IPAddressPool`. - ### ✅ Ejemplo 2: Sin IP explícita (MetalLB elige una disponible) ```yaml @@ -254,40 +298,30 @@ spec: type: LoadBalancer ``` -MetalLB seleccionará automáticamente una IP libre de **cualquier** rango declarado en el pool. - --- -## 2.4 Verificar los resultados +## 2.6 Verificar el funcionamiento -Para comprobar que **MetalLB** asigna direcciones IP correctamente, realiza la siguiente prueba utilizando el manifiesto `test-lb.yaml` que ya está en el repositorio: +Prueba con el manifiesto `test-lb.yaml`: ```bash kubectl apply -f test-lb.yaml -``` - -Supervisa la asignación de IP externa: - -```bash kubectl -n lb-test get svc test-lb -w ``` -Deberías ver en la columna `EXTERNAL-IP` una de las direcciones configuradas en tu `IPAddressPool`. - -Ejemplo de salida esperada: +Salida esperada: ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE test-lb LoadBalancer 10.104.58.240 192.168.1.100 80:30248/TCP 9s ``` -Cuando quieras limpiar la prueba: +Cuando termines: ```bash kubectl delete -f test-lb.yaml ``` -Esto eliminará el Namespace `lb-test` y todos los recursos creados para la prueba. ---