Discussão sobre o modo iptables do kube-proxy e o modo ipvs no k8s

Autor: LI Yu

O modo ipvs foi adicionado na versão 1.8 do k8s. Então, quais são as vantagens e desvantagens deste modelo em comparação com o modelo iptables, vamos discutir isso.
Vamos primeiro revisar como as informações de um pod são alteradas.

Primeiro, o kubectl inicia uma solicitação e a solicitação chega ao api-server e, em seguida, o api-server armazena as informações no etcd. Em seguida, o kube-proxy monitora a alteração do api-server, transmite as informações para o serviço e as envia para o endpoint de back-end por meio do iptables.
Essa série de solicitações é finalmente passada por meio do iptables.

Para cada terminal em segundo plano, como você escolhe para qual enviar? Se o primeiro pod selecionado não responder, ele selecionará outro pod para iniciar.

Isso cria um problema. Iptables é baseado em uma lista de regras de kernel. Quanto mais nós de cluster, pior é o desempenho. Por exemplo, usamos o serviço nodeport em 1000 nós, e cada um dos 1000 serviços tem 10 pods. Então, haverá pelo menos 10.000 regras de iptables em cada nó, o que tornará o kernel muito ocupado. O desempenho da máquina será bastante reduzido.

Em seguida, examinamos o modo ipvs. Nesse modo, o kube-proxy ainda está monitorando as alterações do serviço. E sincronize regularmente as regras do ipvs e as informações de serviço por meio da interface de rede. Ao acessar o serviço, o tráfego fluirá para o endereço do endpoint de back-end.

ipvs é baseado na função de gancho netfilter, que usa a tabela hash como a estrutura de dados subjacente. Isso significa que o ipvs usa menos tráfego para sincronizar regras, tornando o throughput da rede mais eficiente.

Aqui, podemos resumir.

Tanto ipvs quanto iptables são baseados em netfilter. Suas diferenças são:
ipvs fornece melhor escalabilidade e desempenho para clusters de grande escala.
Ipvs suporta algoritmos de balanceamento de replicação mais complexos do que iptables (carga mínima, conexões mínimas, round-robin ponderado, etc.))
Ipvs suporta funções de verificação de integridade de servidor e repetição de conexão

E por que o desempenho é tão bom, mas o K8S sempre usou iptables por padrão? Estima-se que eles acham que a maioria das empresas não exigirá o uso de clusters em grande escala.

Em seguida, tentamos o modo ipvs.

Primeiro verifique o modo atual, o meu é a versão K8S1.18.

Discussão sobre o modo iptables do kube-proxy e o modo ipvs no k8s

Mudamos para o modo ipvs para verificar se o módulo do kernel está carregado.

[root@adm-master ~]# lsmod|grep ip_vs
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145497  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139224  9 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

Este está originalmente vazio, modificado para o modo ipvs

[root@adm-master ~]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited

Discussão sobre o modo iptables do kube-proxy e o modo ipvs no k8s

Excluir todos os pods kube-proxy

[root@adm-master ~]# kubectl delete pod/kube-proxy-84p9n -n kube-system
pod "kube-proxy-84p9n" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-mkbk8 -n kube-system
pod "kube-proxy-mkbk8" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-xzwxl -n kube-system
pod "kube-proxy-xzwxl" deleted

Modo de visualização

Discussão sobre o modo iptables do kube-proxy e o modo ipvs no k8s

Veja as regras relacionadas ao ipvs.

Instale o ipvsadm

yum install -y ipvsadm

Discussão sobre o modo iptables do kube-proxy e o modo ipvs no k8s

Acho que você gosta

Origin blog.51cto.com/14783669/2667539
Recomendado
Clasificación