View a markdown version of this page

Esecuzione di kube-proxy in modalità nftables - Amazon EKS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di kube-proxy in modalità nftables

kube-proxyIn modalità nftables, Amazon EKS è in grado di risolvere il problema di latenza di rete comune nei cluster di grandi dimensioni con oltre 1.000 servizi che eseguono kube-proxy in modalità iptables. La modalità iptables elabora le regole di filtraggio dei pacchetti in sequenza per il primo pacchetto di ogni connessione, il che causa questo problema di prestazioni. nftables è il successore di iptables e il kube-proxy backend nftables risolve questo problema di latenza elaborando i pacchetti in un tempo quasi costante indipendentemente dalle dimensioni del cluster. Per evitare questo problema, configura il cluster in modo che venga eseguito in modalità nftables. kube-proxy

Panoramica di

Il kube-proxy backend nftables è generalmente disponibile (GA) dalla versione 1.33 di Kubernetes. https://kubernetes.io/blog/2025/02/28/nftables-kube-proxy/ Era disponibile come alpha nella 1.29 e beta nella 1.31. Il backend iptables installa una regola per ogni servizio e valuta le regole in sequenza. Ciò si traduce in un tempo di elaborazione dei pacchetti O (n) che aumenta con il numero di servizi. Al contrario, nftables utilizza le mappe dei verdetti per inviare i pacchetti in circa O (1) tempo. Ciò mantiene la latenza per pacchetto quasi costante anche in cluster con decine di migliaia di servizi, garantendo efficienza per i cluster con migliaia di nodi e servizi.

Nota

Anche se il backend di nftables è GA, rimane la modalità predefinita per motivi di compatibilità. iptables kube-proxy È necessario attivare esplicitamente la modalità nftables.

A differenza del backend IPVS, che è stato progettato come sistema di bilanciamento del carico ed espone algoritmi di pianificazione come round robin e least connections, il backend nftables non offre algoritmi di pianificazione configurabili. Quando un servizio ha più pod di supporto, la modalità nftables seleziona un pod di backend a caso.

Requisiti

Il kube-proxy backend nftables richiede il kernel Linux 5.13 o successivo sui nodi di lavoro. Amazon Linux 2023 e le versioni attuali di Ubuntu soddisfano questo requisito minimo. Poiché kube-proxy i programmi nftables governano direttamente tramite il sottosistema netfilter del kernel, non è necessario caricare alcun pacchetto di spazio utente aggiuntivo (ad esempioipvsadm) o modulo del kernel oltre a un kernel supportato.

Nota

Kernel 5.13 è il minimo richiesto per eseguire la modalità nftables. Per migliorare le prestazioni di sincronizzazione delle regole in cluster di grandi dimensioni, consigliamo un kernel e una versione più recenti. kube-proxy Per ulteriori informazioni, consulta Considerazioni sulle prestazioni.

Importante

Il backend nftables potrebbe non essere compatibile con tutti i plugin di rete. Consulta la documentazione del tuo provider CNI prima di abilitare la modalità nftables. Amazon VPC CNI è compatibile con la modalità nftables a partire dalla versione. v1.23.0

Implementazione

Configura i tuoi cluster kube-proxy DaemonSet per l'esecuzione in modalità nftables impostando su. kube-proxy mode nftables

avvertimento

Si tratta di un cambiamento dirompente. Consigliamo di eseguirlo in orari non lavorativi o durante la creazione iniziale del cluster EKS per ridurre al minimo gli impatti.

Puoi emettere un comando AWS Command Line Interface (AWS CLI) per abilitare nftables aggiornando EKS. kube-proxy Add-on Ciò richiede un cluster EKS che esegua Kubernetes 1.33 o versioni successive.

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

Oppure puoi farlo modificando il codice nel tuo cluster. kube-proxy-config ConfigMap

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

Trova l'modeimpostazione predefinita e modifica iptables il valore in. nftables Il risultato di entrambe le opzioni dovrebbe essere simile alla seguente configurazione.

mode: "nftables" nftables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 1s syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 nodePortAddresses: null oomScoreAdj: -998 portRange: ""

Se i nodi di lavoro sono stati uniti al cluster prima di apportare queste modifiche, riavvia il kube-proxy DaemonSet.

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

Considerazioni sulle prestazioni

Sebbene la modalità nftables sia generalmente disponibile a partire dalla versione di Kubernetesv1.33, consigliamo di utilizzarla solo a partire da. v1.36 Nella kube-proxy v1.36.0, il progetto Kubernetes ha apportato molti miglioramenti alle prestazioni nel modo in cui vengono costruite le mappe e le regole di nftables. Queste modifiche riducono significativamente il numero di catene ejump/regole, migliorando notevolmente le prestazioni di sincronizzazione su larga scalagoto.

Questi miglioramenti avvantaggiano principalmente i cluster con un numero elevato di endpoint (i Pod che supportano i tuoi servizi). Prima della kube-proxy versione 1.36.0, i cluster con centinaia di migliaia di endpoint potevano subire tempi di sincronizzazione delle regole nftables molto lenti e blocchi software della CPU. Questo accade perché il kernel Linux verifica che le catene e i salti generati non contengano loop. kube-proxy

Questo comportamento è influenzato anche dalla versione del kernel Linux. I miglioramenti sottostanti al kernel sono inclusi nel kernel Linux 6.18 (e vengono trasferiti su alcuni kernel stabili precedenti). L'uso della modalità nftables con le versioni precedenti del kernel Linux può comportare tempi di sincronizzazione delle regole più lenti e potenziali blocchi software della CPU. Per ottenere le migliori prestazioni in cluster di grandi dimensioni, consigliamo di eseguire un kernel Linux recente insieme alla versione 1.36.0 o successiva. kube-proxy Per maggiori informazioni, vedi kube-proxy nftables performance issue (#135639) sul sito web. kubernetes/kubernetes GitHub