actualizado metallb con ejemplos
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user