REC-20260909-FW-COEXIST — Contrato de coexistencia nftables¶
En wan01/02 el fw-edge-agent (DaemonSet, ver ADR-0019) escribe nftables en el mismo host netns donde ya viven tablas de otros componentes: edge_lb (REDIRECT WAN 80→8000 / 443→8443 de Traefik, hostNetwork), y las tablas que gestionan Cilium/kube-proxy. Contrato que el agente DEBE cumplir:
-
Propiedad exclusiva de tabla: el agente gestiona ÚNICAMENTE
table inet wetopi_fwedge. Nunca lee-modifica-eliminaedge_lbni ninguna otra tabla ajena (cilium, kube-proxy, nat de Cilium EG en natgw). -
PROHIBIDO
nft flush ruleset— destruiría los REDIRECT del edge y las tablas eBPF de Cilium (outage del edge completo). El swap atómico es por-tabla:delete table inet wetopi_fwedge+ recrear la propia. Un fallo daña solo la propia, nunca la del vecino. -
Orden de hooks: el drop de feeds/bloqueos debe ejecutarse ANTES del dstnat/redirect de
edge_lb→ priority del chain prerouting del agente más temprana que la del REDIRECT (p. ej. priorityraw/ -300), de modo que una IP bloqueada muera antes de llegar a Traefik. -
Fail-safe: si el pod del agente muere, NO hay flush — las reglas de la última revisión conocida viven en el kernel hasta que un agente sano las reemplace. Drift/alerta detecta agente muerto.
-
Verificación de convivencia (acceptance del DaemonSet): tras cada apply —
nft list tablesmuestraedge_lbintacto; contadores de REDIRECT no se resetean; tráfico Traefik sin interrupción durante el swap. -
En natgw (nodo k8s con Cilium EG): el SNAT de Cilium EG es su propia capa (eBPF);
wetopi_fwedgeallí lleva las reglas de reputación/egress (SMTP block, clases de salida) SIN interferir con el nat de cilium.
Estado: [PROPUESTA de diseño derivada de R1 — binding para la implementación del fw-edge-agent cuando ADR-0019 pase a accepted].