%20termina%20en%20%22dev%20lo%22%20en%20lugar%20de%20%22dev%20eth0%22%2C%20el%20nodo%20trabajador%20de%20Kubernetes%20no%20puede%20conectarse%20al%20nodo%20maestro.png)
Me topé con (como me parece ahora) un problema de enrutamiento. Ya no puedo acceder a uno de mis nodos trabajadores (servidor) desde mi nodo maestro (servidor). AFAIK, no tiene nada que ver con Kubernetes, conduce a un problema de red puro de Linux. Como el problema es con una sola IP, estaba solucionando problemas de iptables, habilité TRACE y me di cuenta de que el paquete en realidad llega a través del maestro (eth0), llega a iptables (pasa: raw > mangle >nat) pero cuando tiene que ser enrutado de nat a filtro, simplemente desaparece. Según tengo entendido, ese es el punto en el que el kernel tiene que tomar la decisión de enrutamiento. ¿Revisé el enrutamiento y descubrí que no funciona solo para esa IP (todas las demás del mismo segmento de IP funcionan bien)? Como trabajo con un proveedor de nube y no puedo solucionar problemas de red, intenté reinstalar el sistema operativo (el mismo Ubuntu 20.04) del nodo maestro (servidor). Descubrí que con la reinstalación del sistema operativo nuevo, el problema no estaba presente, por lo tanto, el problema de configuración debe estar dentro de mi servidor Linux maestro (revertí la imagen del servidor desde la instantánea).
root@vmi57XXXX:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gw.provider.net 0.0.0.0 UG 0 0 0 eth0
10.244.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0
10.244.1.0 10.244.1.0 255.255.255.0 UG 0 0 0 flannel.1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
root@vmi57XXXX:~# ip route get xx.xx.xx.96
local xx.xx.xx.96 dev lo src xx.xx.xx.96 uid 0
cache <local>
root@vmi57XXXX:~# ip route get xx.xx.xx.95
xx.xx.xx.95 via xx.xx.xx.1 dev eth0 src xx.xx.xx.95 uid 0
cache
root@vmi57XXXX:~# ip route get xx.xx.xx.97
xx.xx.xx.97 via xx.xx.xx.1 dev eth0 src xx.xx.xx.97 uid 0
cache
root@vmi57XXXX:~# arp -v
Address HWtype HWaddress Flags Mask Iface
10.244.0.60 ether 8a:94:de:43:b6:0f C cni0
10.244.0.63 ether 1e:76:6a:60:27:f3 C cni0
10.244.0.62 ether 36:0b:19:5e:57:87 C cni0
gw.provider.net ether 00:c0:1d:c0:ff:ee C eth0
10.244.0.64 ether 82:03:61:c5:4d:fb C cni0
10.244.0.50 (incomplete) cni0
10.244.1.0 ether 52:3d:a5:f4:c2:2c CM flannel.1
10.244.0.61 ether 56:19:98:79:a1:3a C cni0
Entries: 8 Skipped: 0 Found: 8
root@vmi57XXXX:~# ip netconf show dev eth0
inet eth0 forwarding on rp_filter off mc_forwarding off proxy_neigh off
ignore_routes_with_linkdown off
inet6 eth0 forwarding off mc_forwarding off proxy_neigh off
ignore_routes_with_linkdown off
¡¡¡Cualquier pista sobre lo que está pasando allí es más que bienvenida!!!
Gracias
EDITAR: Después de resolver el problema, vale la pena mencionar que este comportamiento se experimentó con Kubernetes 1.21.2-00 y franela como CNI. Hice la actualización hace unas semanas y este fue el primer reinicio de un nodo trabajador después de la actualización.
Respuesta1
¡SOLUCIONADO!
El malo era en realidad Kubernetes: estableció una ruta LOCAL en el nodo maestro que no puede funcionar sin el servicio de red funcional de Kubernetes (franela, en mi caso). Por lo tanto, cuando el nodo trabajador se reinició, ya no pudo acceder al servicio API del nodo maestro (6443/tcp) y no pudo presentarse a la API, ese círculo mágico cerrado en el que el nodo trabajador giró sin suerte.
Hoy aprendí sobre las rutas "locales" mantenidas por el kernel (todas las tablas de enrutamiento actuales se pueden encontrar aquí: /etc/iproute2/rt_tables).
ip route ls table local
local xx.xx.xx.96 dev kube-ipvs0 proto kernel scope host src xx.xx.xx.96 <<< PROBLEMATIC
local xx.xx.xx.50 dev eth0 proto kernel scope host src xx.xx.xx.50 <<< i.e. OK
eliminar ruta
ip route del table local local xx.xx.xx.96 dev kube-ipvs0 proto kernel scope host src xx.xx.xx.96
y ahora funciona
root@vmi57XXXX:~# ip route get xx.xx.xx.96
xx.xx.xx.96 via xx.xx.xx.1 dev eth0 src xx.xx.xx.50 uid 0
cache