Red¶
Parte de la guía de implementación
Ejecuta esta fase con Fase 1 — Red y
playbook-set-static-ip.yml.
Bridge L2 hacia la LAN física¶
Los 3 nodos usan un bridge Linux (br0) sobre la interfaz física,
para que las instancias Incus reciban IP directa de la LAN (red local) y sean
alcanzables entre hosts sin necesitar OVN (Open Virtual Network).
| Nodo | Interfaz física | IP en br0 (estática) |
|---|---|---|
| invincible | eno2 |
192.168.20.6 |
| oliver | eno1 |
192.168.20.7 |
| deborah | enP4p65s0 |
192.168.20.5 |
Confirmá con
ip -br linken el nodo antes de aplicar — el nombre de la interfaz física puede diferir de esta tabla tras una actualización de OS.
Ejemplo netplan — invincible:
# /etc/netplan/br0.yaml
network:
version: 2
renderer: networkd
ethernets:
eno2:
dhcp4: no
bridges:
br0:
interfaces: [eno2]
addresses: [192.168.20.6/22]
routes:
- to: default
via: 192.168.20.1
nameservers:
addresses: [192.168.20.5, 192.168.20.1]
Ejemplo netplan — deborah (misma subred, distinta interfaz y último octeto):
# /etc/netplan/br0.yaml
network:
version: 2
renderer: networkd
ethernets:
enP4p65s0:
dhcp4: no
bridges:
br0:
interfaces: [enP4p65s0]
addresses: [192.168.20.5/22]
routes:
- to: default
via: 192.168.20.1
nameservers:
addresses: [192.168.20.5, 192.168.20.1]
ip -br link
sudo apt install -y netplan.io # Debian no lo trae instalado por defecto
sudo netplan apply # corta SSH si cambias de IP
El playbook Ansible instala netplan.io, habilita systemd-networkd y migra
la NIC (tarjeta de red) fuera de ifupdown antes de escribir /etc/netplan/br0.yaml.
Perfil de Incus para usar el bridge en las instancias:
IP fija — por qué es obligatoria aquí¶
- Incus cluster:
cluster.https_addressqueda grabada por IP al hacer join. - K3s (distribución ligera de Kubernetes): kubelet usa la IP del nodo como identidad.
- CAPN (Cluster API Provider for Incus): el
Secretlxc-secretapunta ahttps://<IP>:8443como string fijo.
Esquema de IPs¶
| Nodo | IP actual (DHCP/pre-bridge) | IP en br0 |
|---|---|---|
| invincible | 192.168.23.162 | 192.168.20.6 |
| oliver | 192.168.20.87 | 192.168.20.7 |
| deborah | 192.168.21.211 | 192.168.20.5 |
La LAN es un
/22(192.168.20.0–192.168.23.255), no un/24— las IPs "actuales" de esta tabla son leases DHCP dentro de ese mismo rango (no subredes distintas). La fuente de verdad en todo momento esansible_hosteninventory.ini.
IPs fijas y reservadas de la LAN:
| Uso | IP / rango | Dónde se configura |
|---|---|---|
| deborah, invincible, oliver | 192.168.20.5, .6, .7 |
static_ip en inventory.ini |
| VIP del API de K3s (kube-vip, opcional) | 192.168.20.4 |
kube_vip.address en k3s_install.yml |
Pool de MetalLB (LoadBalancer, Gateway) |
192.168.23.200–192.168.23.220 |
gitops/metallb/ipaddresspool.yaml |
Fuera del DHCP
Como el DHCP del router reparte en toda la /22, estas IPs y el pool de
MetalLB tienen que quedar reservados o fuera del rango del DHCP en el
router. Si no, el router puede dárselas a otro equipo y chocar.
Tras playbook-set-static-ip.yml, actualizar ansible_host en
inventory.ini
al valor de static_ip si la IP de conexión cambió.