actualizado metallb con ejemplos

This commit is contained in:
2025-07-30 00:20:54 +02:00
parent a825ec4dcc
commit 7496f19df2

View File

@@ -115,13 +115,13 @@ MetalLB permite asignar IPs flotantes de tu red LAN a servicios `LoadBalancer`,
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml
``` ```
Esto crea el namespace `metallb-system` y los pods necesarios. Esto crea el namespace `metallb-system` y despliega los pods necesarios.
--- ---
## b) Declara múltiples pools de IP ## b) Define un pool con múltiples rangos
Puedes crear varios pools (por ejemplo, uno para producción y otro para test, o para diferentes VLANs/segmentos). Los pools se definen en el objeto `IPAddressPool`. En lugar de crear múltiples `IPAddressPool` por separado, puedes declarar varios rangos de IP en un **solo** `IPAddressPool`. Esto simplifica la gestión.
**Ejemplo: `metallb/ipaddresspool.yaml`** **Ejemplo: `metallb/ipaddresspool.yaml`**
@@ -129,20 +129,12 @@ Puedes crear varios pools (por ejemplo, uno para producción y otro para test, o
apiVersion: metallb.io/v1beta1 apiVersion: metallb.io/v1beta1
kind: IPAddressPool kind: IPAddressPool
metadata: metadata:
name: pool-produccion name: pool-general
namespace: metallb-system namespace: metallb-system
spec: spec:
addresses: addresses:
- 192.168.1.100-192.168.1.110 - 192.168.1.100-192.168.1.110 # Rango 1: producción
--- - 192.168.2.100-192.168.2.110 # Rango 2: laboratorio
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: pool-lab
namespace: metallb-system
spec:
addresses:
- 192.168.2.100-192.168.2.110
``` ```
**Ejemplo: `metallb/l2advertisement.yaml`** **Ejemplo: `metallb/l2advertisement.yaml`**
@@ -151,7 +143,7 @@ spec:
apiVersion: metallb.io/v1beta1 apiVersion: metallb.io/v1beta1
kind: L2Advertisement kind: L2Advertisement
metadata: metadata:
name: advert-all name: advert-general
namespace: metallb-system namespace: metallb-system
spec: {} spec: {}
``` ```
@@ -172,46 +164,63 @@ kubectl apply -k metallb/
--- ---
## c) Asigna un pool concreto a un Service (anotaciones) ## c) Asignar una IP concreta al Service (`loadBalancerIP`)
Por defecto, los Services `LoadBalancer` usan cualquier pool disponible. Para forzar el uso de un pool específico, **añade esta anotación al Service**: Puedes indicar directamente la IP deseada usando el campo `loadBalancerIP`, y MetalLB la asignará si pertenece a uno de los rangos definidos.
### ✅ Ejemplo 1: Asignación explícita con `loadBalancerIP`
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: ejemplo-prod name: nginx-prod
annotations:
metallb.universe.tf/address-pool: pool-produccion
spec: spec:
selector: selector:
app: ejemplo app: nginx
ports: ports:
- port: 80 - port: 80
targetPort: 80 targetPort: 80
type: LoadBalancer type: LoadBalancer
loadBalancerIP: 192.168.1.105 # IP concreta del pool
``` ```
* Cambia `pool-produccion` por el nombre de pool que quieras usar. No es necesario usar anotaciones si la IP está incluida en el `IPAddressPool`.
Al crear el Service, MetalLB le asignará una IP **solo de ese pool**. ### ✅ Ejemplo 2: Sin IP explícita (MetalLB elige una disponible)
```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-lab
spec:
selector:
app: nginx
ports:
- port: 8080
targetPort: 80
type: LoadBalancer
```
MetalLB seleccionará automáticamente una IP libre de **cualquier** rango declarado en el pool.
--- ---
## d) Comprobar el resultado ## d) Verificar los resultados
```bash ```bash
kubectl get svc kubectl get svc
``` ```
Verás la IP asignada en la columna `EXTERNAL-IP`. Verás la IP externa asignada en la columna `EXTERNAL-IP`.
--- ---
> **Notas:** ## 📜 Notas importantes
>
> * Puedes definir tantos pools como necesites, uno por segmento/VLAN/uso.
> * Puedes versionar los manifiestos de MetalLB en una carpeta específica del repositorio (`metallb/`).
--- - Puedes declarar varios rangos en un solo `IPAddressPool`.
- No necesitas anotaciones para indicar qué pool usar si especificas directamente una IP con `loadBalancerIP`.
- Es buena práctica versionar todos los manifiestos en una carpeta `metallb/` dentro de tu repo Git.
- El uso de múltiples pools por separado sigue siendo válido, pero es innecesario si no quieres asignar pools por nombre con anotaciones.