# Known issues ## Blackhole de red cross-node en el cluster k3d (MTU/PMTUD, flannel VXLAN) **Estado:** workaround aplicado, fix definitivo pendiente. **Síntoma:** cualquier pod que necesite hablar con `commerce-postgres-0` (StatefulSet, sin réplicas, fijo a un nodo) falla de forma consistente y reproducible al 100% cuando queda agendado en un nodo **distinto** al de Postgres. El handshake TCP (SYN/ACK, `nc`, `ping`) funciona perfecto entre nodos, pero el primer paquete de datos real de la sesión (protocolo Postgres, `pg_isready` incluido) nunca llega — se cuelga hasta hacer timeout. **Diagnóstico:** - Confirmado aislando el nodo con `nodeName` en pods de prueba: 100% de fallos (186/186 intentos) agendando cross-node (`agent-0` → Postgres en `server-0`); 100% de éxito agendando en el mismo nodo. - MTU dentro de los pods (interfaz `flannel.1`/VXLAN) es 1450 en ambos nodos — consistente, no es un mismatch obvio a nivel flannel. - `ping` sin `-M do` (permite fragmentación) no muestra pérdida de paquetes hasta payloads de 2000 bytes entre los contenedores Docker de los nodos. - Encaja con un blackhole de PMTU Discovery: el bridge Docker externo que conecta los contenedores de los nodos k3d probablemente tiene un MTU real menor a 1500, y los paquetes TCP con el bit DF puesto (como los de la sesión de Postgres) se pierden en vez de fragmentarse o generar el ICMP "fragmentation needed" que permitiría el ajuste automático. **Workaround temporal (aplicado en `workloads/ecommerce/commerce/medusa.yaml`):** `podAffinity` con `requiredDuringSchedulingIgnoredDuringExecution` sobre `medusa-deploy`, forzando que sus pods se agenden siempre en el mismo nodo que `commerce-postgres-0` (`matchLabels: app: commerce-postgres`, `topologyKey: kubernetes.io/hostname`). Esto evita el tráfico cross-node entre Medusa y Postgres, pero no resuelve el problema de fondo — cualquier otro workload que necesite cruzar nodos para hablar con Postgres (u otro servicio) puede pisar el mismo blackhole. **TODO — fix definitivo pendiente:** Ajustar el MTU del cluster k3d a un valor seguro (`1400`) de forma consistente en la red Docker del cluster y en flannel, para eliminar el blackhole de raíz y poder quitar el `podAffinity` (o dejarlo como optimización, no como requisito de disponibilidad).