Fase 1 — Red¶
Objetivo¶
Bridge br0 con IP estática en los 3 nodos, lista para Incus, K3s (distribución ligera de Kubernetes) y CAPN (Cluster API Provider for Incus).
Qué aprendes¶
Por qué el HomeLab exige IP fija: Incus graba cluster.https_address, K3s usa
la IP como identidad del kubelet y CAPN referencia https://<IP>:8443 en
secretos.
Stack de esta fase¶
flowchart TB
PHY[Interfaz_fisica] --> BR0[br0_L2]
BR0 --> IP[IP_estatica]
IP --> SSH[ansible_host]
IP --> Incus[Instancias_Incus]
IP --> K3s[kubelet_node_ip]
- Netplan — Configuración declarativa de red en Debian; Fase 1.
- Ansible — Aplica netplan de forma idempotente vía
playbook-set-static-ip.yml. - Rol:
netplan_bridge
Profundización: Red — ejemplos netplan
Antes de empezar¶
- Fase 0 — Preparación completada (
ansible pingOK). - Sabes la interfaz física por nodo (
eno1,eno2,enP4p65s0). - IPs destino definidas en inventario.
| Nodo | Interfaz | IP en br0 |
|---|---|---|
| invincible | eno2 |
192.168.20.6 |
| oliver | eno1 |
192.168.20.7 |
| deborah | enP4p65s0 |
192.168.20.5 |
Confirmá siempre con
ip -br linken el nodo antes de asumir estos valores.
Ejecutar¶
Corte de SSH
Si cambias de IP, Ansible puede perder la sesión. El playbook usa
serial: 1 — un nodo a la vez. Actualiza ansible_host tras cada nodo
si la IP de conexión cambió.
cd ansible
# Un nodo a la vez si la IP de conexión cambia
ansible-playbook -i inventory.ini playbook-set-static-ip.yml \
--limit invincible
# Actualiza ansible_host en inventory.ini si hace falta, luego:
ansible-playbook -i inventory.ini playbook-set-static-ip.yml \
--limit oliver
ansible-playbook -i inventory.ini playbook-set-static-ip.yml \
--limit deborah
Ver ejemplos YAML en Red:
Opciones¶
| Decisión | Default HomeLab |
|---|---|
| Orden de nodos | Uno a la vez (serial: 1) |
Los 3 nodos cambian de IP al aplicar
No hay atajo: actualizá ansible_host en inventory.ini después de
cada nodo (por eso serial: 1).
playbook-set-static-ip.yml)serial: 1Verificar¶
ansible -i ansible/inventory.ini incus_cluster -m command -a "ip -br addr show br0"
# Cada nodo muestra su IP estática en br0
ping -c 2 192.168.20.5
ping -c 2 192.168.20.6
ping -c 2 192.168.20.7
Si falla¶
| Síntoma | Revisar |
|---|---|
| SSH perdido tras apply | Conectar por IP nueva; actualizar inventory.ini |
Sin br0 |
Interfaz en bridge_iface; logs journalctl -u systemd-networkd |
DNS (BIND en deborah)¶
Los 3 nodos usan 192.168.20.5 (deborah) como primer DNS y el gateway
192.168.20.1 como segundo. Con la IP fija ya aplicada en deborah, instalá
y configurá BIND (Berkeley Internet Name Domain) ahí (corre solo sobre deborah):
Hasta que corra, los nodos resuelven por el gateway, con algo de demora en
cada consulta. Detalle:
ansible/roles/bind_dns/README.md.
Hardening (recomendado antes de seguir)¶
Con la IP ya fija es el momento de endurecer el host, antes de que se una al cluster. No es parte de las Fases 0–6 originales, pero va acá en la secuencia real (ver Hardening post-incidente):
ansible-playbook -i inventory.ini playbook-hardening.yml --check --diff
ansible-playbook -i inventory.ini playbook-hardening.yml
Detalle:
ansible/roles/host_hardening/README.md.
Siguiente¶
Orden completo de bootstrap (incluye hardening, BIND, WiFi):
ansible/bootstrap/README.md.