Comparação entre iptables e IPVS
kube-proxy é um componente importante de um cluster do Kubernetes. Ele é usado para balanceamento de carga e encaminhamento de dados entre um serviço e seus pods de back-end.
O CCE suporta os modos de encaminhamento iptables e IPVS.
- O IPVS permite maior taxa de transferência e encaminhamento mais rápido. Esse modo se aplica a cenários em que a escala de cluster é grande ou o número de serviços é grande.
- iptables é o modo kube-proxy tradicional. Esse modo se aplica ao cenário em que o número de serviços é pequeno ou há um grande número de conexões simultâneas curtas no cliente. Quando há mais de 1.000 Serviços no cluster, pode ocorrer atraso de rede.
Restrições
- Em um cluster usando o modo de proxy IPVS, se o ingress e o Serviço usarem o mesmo balanceador de carga do ELB, o ingress não pode ser acessado dos nós e contêineres no cluster porque o kube-proxy monta o endereço do Serviço LoadBalancer na ponte ipvs-0. Essa ponte intercepta o tráfego do balanceador de carga conectado ao ingress. Use balanceadores de carga do ELB diferentes para o ingress e o Serviço.
- No modo iptables, o ClusterIP não pode ser pingado. No modo IPVS, o ClusterIP pode ser pingado.
iptables
iptables é uma função do kernel do Linux para processar e filtrar um grande número de pacotes de dados. Ele permite sequências flexíveis de regras para ser anexado a vários ganchos no pipeline de processamento de pacotes. Quando o iptables é usado, o kube-proxy implementa a NAT e o balanceamento de carga no gancho de pré-roteamento da NAT.
kube-proxy é um algoritmo O(n), no qual n aumenta com a escala de cluster. A escala de cluster refere-se ao número de serviços e pods de back-end.
IPVS
O IP Virtual Server (IPVS) é construído sobre o Netfilter e equilibra as cargas da camada de transporte como parte do kernel do Linux. O IPVS pode direcionar solicitações de serviços baseados em TCP ou UDP para os servidores reais e fazer com que os serviços dos servidores reais apareçam como serviços virtuais em um único endereço IP.
No modo IPVS, o kube-proxy usa o balanceamento de carga do IPVS em vez do iptables. O IPVS foi projetado para equilibrar cargas para um grande número de Serviços. Ele possui um conjunto de APIs otimizadas e usa algoritmos de pesquisa otimizados em vez de simplesmente procurar regras em uma lista.
A complexidade do processo de conexão do kube-proxy baseado em IPVS é O(1). Na maioria dos casos, a eficiência de processamento da conexão é irrelevante para a escala do cluster.
O IPVS envolve vários algoritmos de balanceamento de carga, como round-robin, menor atraso esperado, menor quantidade de conexões e vários métodos de hash. No entanto, o iptables tem apenas um algoritmo para seleção aleatória.
Comparado com o iptables, o IPVS apresenta as seguintes vantagens:
- Oferece melhor escalabilidade e desempenho para grandes clusters.
- Suporta algoritmos de balanceamento de carga melhores que o iptables.
- Suporta funções, incluindo verificação de integridade do servidor e tentativas de conexão.