VmWARE NSX y Docker: Problemas de red

Feliz año!
Despues de un periodo de barbecho, vuelvo a la carga con unas de las cosas que he vivido en este tiempo, que no es otra que
problemas en los Docker Swarm

Nosotros tenemos todo montado como microservicios que se despliegan con #GoCD usando scripts de #Ansible, esos generan los
containers y los despliegan en los nodos de #swarm que deben (usamos docker labels, que ya hablare en otra ocasion de ellos).
Estos nodos los tenemos corriend en VMs de VmWARE ESX 6.5 en varios datacenters por el mundo (aun no somos de esos cloud-freaks,
pero ya estamos empezando a usar todo con #Azure y #Terraform ).

El problema viene cuando un dia, a las 01 y algo de la mañana suena mi telefono de guardia y miro las notificaciones de #zabbix:

Millones de problem & recovery del #haproxy que los nodos de swarm han muerto y vuelto a la vida

Y esto no ha hecho mas que comenzar.

Os la voy hacer corta, porque si llegais aqui, querreis solucionarlo lo antes posible.

Diseccion

Sintomas

  • Perdida intermitente de conectividad entre workers del swarm
  • Telnet y Ping funcionan
  • SSH tarda mucho en conectar, cuando conecta.
  • En el mismo nodo de docker, todo funciona. Hacia contenedores de otros nodos, presentan esos fallos

Entorno

  • Tienes docker swarm y estas usando la red de swarm
  • Tienes como hypervisor VmWARE ESXi / vSphere a partir de 6.2.3
  • Tienes NSX en VmWARE

Causa

Resulta que NSX a partir de la version 6.2.3 tiene reservado el puerto UDP/4789 para VLAN VXTEP y casualmente, este puerto es el de Docker SWARM para la red de swarm. Esto ocasiona que VMWare, haga drop de los paquetes que van por ahi. De manera, que en el mismo worker de docker, al no ser un paquete OUTBOUND, funcione.
Antes de la version 6.2.3 el puerto del VLAN VXTEP es UDP/8472

La causa de la intermitencia en los servicios, no la se a ciencia cierta, pero intuyo que debe de ser que no hace drop de todos los paquetes, solo algunos. Generando aun mas desconcierto por que no es que no funcione, sino que el fallo es intermitente

Solucion

Cambia en el VMware el puerto VLAN VXTEP a cualquier otro o vuelve al anterior.
Inmediatamente despues de hacer esto, todos tus nodos de swarm volveren a funcionar.

Notas finales

Es curioso, que el proveedor, tuvo una llamada con soporte de VMWare de casi 6 horas y nadie de ellos (del proveedor o de VMWare ) preguntara / descubriera que el activar el NSX usando Docker en versiones superiores a 6.2.3 impactaria en la red de Docker.

Yo los descubri despues de pasar una noche en vela y averiguar que el proveedor habia activado el NSX alrededor en un cambio de red, catalogado como trivial, a las 7 de la mañana. Esto es, casi 6 horas pues de me despertaran (y 6 horas que se tiro el entorno de produccion hecho unos zorros) y tropezar sobre este articulo de, como no, Stackoverflow

networking - Docker-swarm overlay network is not working for containers in different hosts - Stack Overflow

Comentarios

⬆︎TOP