Skip to content

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:

  1. Propiedad exclusiva de tabla: el agente gestiona ÚNICAMENTE table inet wetopi_fwedge. Nunca lee-modifica-elimina edge_lb ni ninguna otra tabla ajena (cilium, kube-proxy, nat de Cilium EG en natgw).

  2. 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.

  3. 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. priority raw / -300), de modo que una IP bloqueada muera antes de llegar a Traefik.

  4. 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.

  5. Verificación de convivencia (acceptance del DaemonSet): tras cada apply — nft list tables muestra edge_lb intacto; contadores de REDIRECT no se resetean; tráfico Traefik sin interrupción durante el swap.

  6. En natgw (nodo k8s con Cilium EG): el SNAT de Cilium EG es su propia capa (eBPF); wetopi_fwedge allí 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].