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.
Direccionamiento de la LAN (192.168.20.0/22, gateway 192.168.20.1)¶
El DHCP del router reparte 192.168.20.31 a 192.168.23.191. Todo lo fijo vive fuera de ese rango:
| Rango | Uso | Dónde se configura |
|---|---|---|
192.168.20.1 |
Gateway (router) | Router |
192.168.20.4 |
VIP del API de K3s (kube-vip, opcional) | kube_vip.address en k3s_install.yml |
192.168.20.5, .6, .7 |
deborah, invincible, oliver | static_ip en inventory.ini |
192.168.20.31 – 192.168.23.191 |
DHCP del router | Router |
192.168.23.192 – .199 |
Libre | — |
192.168.23.200 – .220 |
MetalLB (LoadBalancer, Gateway; el Gateway de Kong usa .200) |
gitops/metallb/ipaddresspool.yaml |
192.168.23.221 – .223 |
Libre | — |
192.168.23.224/28 (.224–.239) |
LB de Incus (OVN), ipv4.routes de la uplink |
incus_ovn_lb_routes en group_vars/incus_cluster/ovn.yml |
192.168.23.240 – .249 |
OVN externo, ipv4.ovn.ranges (un router virtual por red OVN) |
incus_ovn_external_ranges en el mismo archivo |
192.168.23.250 – .255 |
Libre (.255 es el broadcast de la /22) |
— |
Fuera de la LAN, redes privadas que no se pueden solapar con ella ni entre sí:
| Red | Uso |
|---|---|
10.42.0.0/16 y 10.43.0.0/16 |
Pods y Services de K3s |
192.168.19.0/24 |
Red interna de OVN (ovn-lan, con NAT) |
Fuera del DHCP
Las IPs fijas, el pool de MetalLB y los segmentos de OVN tienen que quedar fuera del rango del DHCP
(192.168.20.31–192.168.23.191). Si no, el router puede dárselas a otro equipo y chocar. El preflight del rol
incus_ovn falla si sus segmentos solapan con el DHCP o con MetalLB.
Tras playbook-set-static-ip.yml, actualizar ansible_host en
inventory.ini
al valor de static_ip si la IP de conexión cambió.