Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> Cloud Container Engine> Preguntas frecuentes> Nodo> Núcleo de nodos> Problemas causados por la configuración conn_reuse_mode en el modo de reenvío IPVS de clústeres de CCE
Actualización más reciente 2023-08-08 GMT+08:00

Problemas causados por la configuración conn_reuse_mode en el modo de reenvío IPVS de clústeres de CCE

Síntoma

En el modo de reenvío IPVS utilizado en un clúster de CCE, puede haber una latencia de 1 segundo cuando un Service accede al clúster de CCE. Esto se debe a un error en la reutilización de las conexiones IPVS de Kubernetes.

Parámetro de reutilización de conexión de IPVS

La política de reutilización de puertos de IPVS viene determinada por el parámetro net.ipv4.vs.conn_reuse_mode del núcleo.

  1. Si net.ipv4.vs.conn_reuse_mode se establece en 0, IPVS no reprograma una nueva conexión, sino que reenvía la nueva conexión al RS original (IPVS backend).
  2. Si net.ipv4.vs.conn_reuse_mode se establece en 1, IPVS reprograma una nueva conexión.

Problemas causados por la reutilización de la conexión de IPVS

  • Problema 1

    Si net.ipv4.vs.conn_reuse_mode se establece en 0, IPVS no programa de forma proactiva nuevas conexiones con reutilización de puertos ni activa ninguna operación de terminación o desconexión de la conexión. Los paquetes de datos de las nuevas conexiones se reenviarán directamente al RS original. Si se ha eliminado el pod de backend, se produce una excepción. Sin embargo, de acuerdo con la lógica de implementación actual, el RS no será borrado por kube-proxy siempre y cuando las solicitudes de conexión para la reutilización del puerto se envíen continuamente.

  • Problema 2

    Si net.ipv4.vs.conn_reuse_mode se establece en 1, si el puerto de origen es el mismo que el de una conexión anterior en un escenario de alta simultaneidad, la conexión no se reutiliza sino que se reprograma. De acuerdo con la lógica de procesamiento de ip_vs_in(), si net.ipv4.vs.conntrack está habilitado, se descarta el primer paquete SYN. Como resultado, el paquete SYN se retransmitirá, conduciendo a una latencia de 1 segundo. Como resultado, el rendimiento se deteriora.

Configuración de la comunidad e impacto en los clústeres de CCE

En Kubernetes 1.17 y versiones anteriores, el valor predeterminado de net.ipv4.vs.conn_reuse_mode es 0. A partir de Kubernetes 1.19, puede determinar si habilitar net.ipv4.vs.conn_reuse_mode en función de la versión del núcleo. Si la versión del núcleo es posterior a 4.1, establezca net.ipv4.vs.conn_reuse_mode en 1. En otros casos, conserve el valor predeterminado 0.

Impacto en los nodos de CCE

  1. En clústeres de CCE de 1.17 y versiones anteriores, si se utiliza IPVS para reenviar datos, el problema 1 se produce cuando net.ipv4.vs.conn_reuse_mode se establece en 0. El RS no se puede quitar debido a la reutilización del puerto.
  2. En los clústeres de CCE de 1.19:
    • Si está utilizando EulerOS 2.5 o CentOS 7.6, el problema 1 se produce cuando net.ipv4.vs.conn_reuse_mode se establece en 0. El RS no se puede quitar debido a la reutilización del puerto.
    • Si está usando EulerOS 2.9 o Ubuntu 18.04, el problema 2 se produce cuando net.ipv4.vs.conn_reuse_mode se establece en 1. Se produce una latencia de 1 segundo en escenarios de alta simultaneidad.

Sugerencias

Si los problemas anteriores afectan a sus servicios, tome las siguientes medidas:

  1. Utilice un clúster cuyo modo de reenvío sea iptables.
  2. Si el impacto de este problema es leve, seleccione una versión del sistema operativo adecuada para clústeres de 1.19.

Plan de Rectificación

CCE ha solucionado los problemas relacionados en EulerOS 2.9. Restablezca el nodo o crear un nuevo nodo para resolver el problema.

Se han corregido las siguientes versiones del kernel:
  • x86: 4.18.0-147.5.1.6.h686.eulerosv2r9.x86_64
  • Arm: 4.19.90-vhulk2103.1.0.h584.eulerosv2r9.aarch64

Problema de la comunidad de Kubernetes: https://github.com/kubernetes/kubernetes/issues/81775

Núcleo de nodos Preguntas frecuentes

more