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/
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
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