Los pods de un nodo específico no tienen acceso a Internet

Los pods de un nodo específico no tienen acceso a Internet

Los pods en un nodo específico (llamémoslo minodo) no tienen acceso a Internet, los pods restantes programados en otros nodos sí tienen acceso a Internet.

mynode tiene acceso a Internet, puedo acceder a él mediante ssh, también puedo iniciar contenedores Docker independientes y ellos tienen acceso a Internet, pero los pods programados en el nodo no.

El problema afecta la entrada y la salida, kubelet se ejecuta en el puerto 10250 y se puede acceder a él a través de: curl https://localhost:10250 -kreturn 404 page not found.

Contexto: Mi clúster tiene pocos nodos con las mismas especificaciones. Ayer decidí actualizar el sistema operativo (20.04 a 22.04), por lo que eliminé el clúster K8S anterior que funcionaba bien, actualicé el sistema operativo en todos los nodos, reinstalé K8S y volví a crear el clúster. , todo funciona sin problemas en todos los nodos excepto mynode, está en ReadyState, parece estar bien, excepto que no lo está.

Mi CNI es calicó. Los pods Calico (csi-node-driver y calico-node) en el nodo están en estado de ejecución, no se reinician.

Seguí la página de depuración en el sitio web de k8s, no se puede acceder al servidor HTTP programado en el pod, por lo que este problema afecta a ambos.ingreso y egreso.

Respuesta1

Parece que el problema ocurrió después de la actualización del sistema operativo, así que verifique que el complemento CNI, las imágenes de contenedor y CRI de los pods estén actualizados y sean compatibles con la versión más reciente del sistema operativo 22.04.

El problema puede ocurrir por varias razones, comopolíticas de redbloqueo de acceso, configuración de red de pods y problemas de Calico CNI. Siga los pasos a continuación que pueden ayudar a resolver su problema:

  1. Revise los registros de coreDNS y los registros de pod para comprender el problema; obtendrá más información ejecutando los comandos:

    registros de kubectl --namespace=kube-system -l k8s-app=kube-dns

    kubectl registra el nombre del pod

  2. Verifique las políticas de red que bloquean el tráfico al pod. Obtendrá más información ejecutando el comando:kubectl get networkpolicy

  3. Verifique los puertos requeridosestán abiertos o no.

  4. Compruebe si la regla de firewall dentro del pod puede bloquear el tráfico.

  5. Haga coincidir los pods CIDR y el valor predeterminado de Calico es 192.168.0.0/16, consultecomentario de githubpara más detalles.

  6. Si el servidor HTTP se basa en nombres DNS, asegúrese deresolución DNSestá configurado correctamente dentro del clúster.

Editar1

  1. A veces no hay problemas con CoreDNS, pero debido a problemas de red k8s donde el tráfico a ClusterIP no se dirige correctamente a los Pods. Puede deberse al proxy de Kube. Consulte k8Servicios de depuraciónpara obtener una guía de solución de problemas.

  2. También verifique si las redes Pod se superponen con las redes host. Referirse aInstalación de un complemento de red Podpara más detalles.

  3. A veces, las funciones relacionadas con la red no se cargan durante la actualización y, cuando ingresa a dichos pods, está trabajando como usuario root. Así que intenta hacerlo apt-get updatey luego podrás hacerlo.apt-get install curl.

Respuesta2

La solución fue reiniciar el servidor...

Respuesta3

Se espera que Kubelet le muestre 404ya que esa URL no existe. prueba lo siguiente:

curl -k https://localhost:10250/healthz

Empezaría por ip_forwardcomprobar el nodo defectuoso.

cat /proc/sys/net/ipv4/ip_forward

Si ese no es el caso, comprobaré las políticas que Calico aplica.

kubectl get networkpolicy -A
kubectl get gnp
kubectl get cnp -A

Lo siguiente que verificaría nates que esté habilitado para IPPool.

kubetl get ippool -o yaml

Verifique la puerta de enlace.

Nota: La limpieza de iptables puede interrumpir temporalmente su conexión; asegúrese de tener una conexión de consola a mano.

Vaciar IPtables también podría no ser una mala idea, podría ser algún tipo de regla que se haya excedido en su bienvenida.

iptables -F

información relacionada