Comparación de iptables e IPVS
kube-proxy es un componente clave de un clúster de Kubernetes. Es responsable del balanceo de carga y el reenvío entre un Service y su pod de backend.
CCE admite dos modos de reenvío: iptables e IPVS.
- IPVS permite un mayor rendimiento y un reenvío más rápido. Este modo se aplica a escenarios en los que el ajuste del clúster es grande o el número de servicios es grande.
- iptables es el modo kube-proxy tradicional. Este modo se aplica al escenario donde el número de servicios es pequeño o un gran número de conexiones cortas se envían simultáneamente en el cliente.
Restricciones
En un clúster que usa el modo proxy IPVS, si el ingreso y el Service usan el mismo balanceador de carga de ELB, no se puede acceder a la entrada desde los nodos y contenedores en el clúster porque kube-proxy monta la dirección de LoadBalancer Service en el puente ipvs-0. Este puente intercepta el tráfico del balanceador de carga conectado a la entrada. Se recomienda utilizar diferentes balanceadores de carga de ELB para la entrada y el Service.
iptables
iptables es una función del kernel de Linux que proporciona una gran cantidad de capacidades de procesamiento y filtrado de paquetes de datos. Permite unir secuencias flexibles de reglas a varios ganchos en la canalización de procesamiento de paquetes. Cuando se usa iptables, kube-proxy implementa NAT y balanceo de carga en el gancho de pre-routing de NAT.
kube-proxy es un algoritmo O(n), en el que n aumenta con el ajuste de clúster. El ajuste del clúster se refiere al número de servicios y pods de backend.
IPVS
IP Virtual Server (IPVS) está construido sobre Netfilter e implementa el balanceo de carga de la capa de transporte como parte del núcleo de Linux. IPVS puede dirigir solicitudes de servicios basados en TCP y UDP a los servidores reales, y hacer que los servicios de los servidores reales aparezcan como servicios virtuales en una sola dirección IP.
En el modo IPVS, kube-proxy utiliza balanceo de carga de IPVS en lugar de iptables. IPVS está diseñado para equilibrar cargas para un gran número de Services. Tiene un conjunto de API optimizadas y utiliza algoritmos de búsqueda optimizados en lugar de simplemente buscar reglas de una lista.
La complejidad del proceso de conexión del kube-proxy basado en IPVS es O(1). En otras palabras, en la mayoría de los casos, la eficiencia del procesamiento de la conexión es irrelevante para la escala de clúster.
IPVS implica múltiples algoritmos de balanceo de carga, tales como round-robin, el retardo esperado más corto, las conexiones mínimas y varios métodos de hash. Sin embargo, iptables solo tiene un algoritmo para la selección aleatoria.
En comparación con iptables, IPVS tiene las siguientes ventajas:
- Proporciona una mejor escalabilidad y rendimiento para los clústeres grandes.
- Soporta mejores algoritmos de balanceo de carga que iptables.
- Admite funciones que incluyen comprobación del estado del servidor y reintentos de conexión.