Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Ejecutando kube-proxy en modo IPVS

Modo de enfoque
Ejecutando kube-proxy en modo IPVS - Amazon EKS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

EKS en el modo de servidor virtual IP (IPVS) resuelve el problema de latencia de la red que suele producirse cuando se ejecutan clústeres grandes con más de 1000 servicios con kube-proxy ejecutándose en el modo iptables antiguo. Este problema de rendimiento es el resultado del procesamiento secuencial de las reglas de filtrado de paquetes de iptables para cada paquete. Este problema de latencia se solucionó en nftables, el sucesor de iptables. Sin embargo, en el momento de escribir este artículo, kube-proxy aún estaba en desarrollo para utilizar nftables. Para solucionar este problema, puedes configurar tu clúster para que se ejecute en modo IPVS. kube-proxy

Descripción general

IPVS, que ha estado en formato GA desde la versión 1.11 de Kubernetes, utiliza tablas hash en lugar de búsquedas lineales para procesar los paquetes, lo que proporciona eficiencia a los clústeres con miles de nodos y servicios. IPVS se diseñó para equilibrar la carga, lo que lo convierte en una solución adecuada para los problemas de rendimiento de las redes de Kubernetes.

IPVS ofrece varias opciones para distribuir el tráfico a los pods de back-end. Puede encontrar información detallada sobre cada opción en la documentación oficial de Kubernetes, pero a continuación se muestra una lista sencilla. Round Robin y Least Connections se encuentran entre las opciones de equilibrio de carga de IPVS más populares en Kubernetes.

- rr (Round Robin)
- wrr (Weighted Round Robin)
- lc (Least Connections)
- wlc (Weighted Least Connections)
- lblc (Locality Based Least Connections)
- lblcr (Locality Based Least Connections with Replication)
- sh (Source Hashing)
- dh (Destination Hashing)
- sed (Shortest Expected Delay)
- nq (Never Queue)

Implementación

Solo se requieren unos pocos pasos para habilitar IPVS en su clúster de EKS. Lo primero que debe hacer es asegurarse de que las imágenes del nodo de trabajo de EKS tengan instalado el ipvsadm paquete de administración del servidor virtual de Linux. Para instalar este paquete en una imagen basada en Fedora, como Amazon Linux 2023, puede ejecutar el siguiente comando en la instancia del nodo trabajador.

sudo dnf install -y ipvsadm

En una imagen basada en Debian, como Ubuntu, el comando de instalación tendría este aspecto.

sudo apt-get install ipvsadm

A continuación, debe cargar los módulos del núcleo para las opciones de configuración de IPVS enumeradas anteriormente. Recomendamos escribir estos módulos en un archivo dentro del /etc/modules-load.d/ directorio para que sobrevivan a un reinicio.

sudo sh -c 'cat << EOF > /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc ip_vs_wlc ip_vs_lblc ip_vs_lblcr ip_vs_sh ip_vs_dh ip_vs_sed ip_vs_nq nf_conntrack EOF'

Puede ejecutar el siguiente comando para cargar estos módulos en una máquina que ya esté funcionando.

sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_lc sudo modprobe ip_vs_wlc sudo modprobe ip_vs_lblc sudo modprobe ip_vs_lblcr sudo modprobe ip_vs_sh sudo modprobe ip_vs_dh sudo modprobe ip_vs_sed sudo modprobe ip_vs_nq sudo modprobe nf_conntrack
nota

Se recomienda encarecidamente ejecutar estos pasos del nodo de trabajo como parte del proceso de arranque del nodo de trabajo mediante un script de datos de usuario o en cualquier script de compilación que se ejecute para crear una AMI de nodo de trabajo personalizada.

A continuación, configurará los clústeres para que se kube-proxy DaemonSet ejecuten en modo IPVS. Esto se hace configurando una de kube-proxy mode ipvs las ipvs scheduler opciones de equilibrio de carga enumeradas anteriormente, por ejemplo: rr para Round Robin.

aviso

Se trata de un cambio disruptivo y debe realizarse fuera del horario laboral. Recomendamos realizar estos cambios durante la creación inicial del clúster de EKS para minimizar los impactos.

Puede emitir un comando de la AWS CLI para habilitar IPVS actualizando el complemento kube-proxy EKS.

aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE

O bien, puede hacerlo modificando el kube-proxy-config ConfigMap de su clúster.

kubectl -n kube-system edit cm kube-proxy-config

Busque la scheduler configuración en ipvs y establezca el valor en una de las opciones de equilibrio de carga de ipvs enumeradas anteriormente, por ejemplo: rr para Round Robin. Busca la mode configuración, cuyo valor predeterminado esiptables, y cambia el valor a. ipvs El resultado de cualquiera de las opciones debería ser similar al de la siguiente configuración.

iptables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 0s syncPeriod: 30s ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "rr" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 mode: "ipvs" nodePortAddresses: null oomScoreAdj: -998 portRange: "" udpIdleTimeout: 250ms

Si los nodos de trabajo se unieron al clúster antes de realizar estos cambios, tendrás que reiniciar el DaemonSet kube-proxy.

kubectl -n kube-system rollout restart ds kube-proxy

Validación

Para validar que el clúster y los nodos de trabajo se estén ejecutando en modo IPVS, ejecute el siguiente comando en uno de sus nodos de trabajo.

sudo ipvsadm -L

Como mínimo, deberías ver un resultado similar al siguiente, que muestre las entradas del servicio de servidor de API de Kubernetes en y 10.100.0.1 el servicio de CoredNS en. 10.100.0.10

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ip-10-100-0-1.us-east-1. rr -> ip-192-168-113-81.us-eas Masq 1 0 0 -> ip-192-168-162-166.us-ea Masq 1 1 0 TCP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0 UDP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0
nota

El resultado de este ejemplo proviene de un clúster EKS con un rango de direcciones IP del servicio de. 10.100.0.0/16

En esta página

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.