Quandu Linux conttrack ùn hè più u vostru amicu

Quandu Linux conttrack ùn hè più u vostru amicu

U seguimentu di a cunnessione ("conntrack") hè una funzione core di a pila di rete di u kernel Linux. Permette à u kernel di mantene a traccia di tutte e cunnessione o flussi di rete lògichi è cusì identificà tutti i pacchetti chì custituiscenu ogni flussu in modu chì ponu esse processati inseme in sequenza.

Conntrack hè una funzione di kernel impurtante chì hè utilizata in certi casi basi:

  • NAT si basa nantu à l'infurmazioni da conntrack per pudè trattà tutti i pacchetti da u stessu flussu ugualmente. Per esempiu, quandu un pod accede à un serviziu Kubernetes, u bilanciatore di carica kube-proxy usa NAT per dirige u trafficu à un pod specificu in u cluster. Conntrack registra chì per una determinata cunnessione, tutti i pacchetti à u serviziu IP devenu esse mandati à u stessu pod, è chì i pacchetti restituiti da u pod backend deve esse NATed back to the pod da quale hè vinutu a dumanda.
  • Firewalls stateful cum'è Calico s'appoghjanu nantu à l'infurmazioni da connecttrack à u trafficu di "risposta" di lista bianca. Questu permette di scrive una pulitica di rete chì dice "permette à u mo pod per cunnette à qualsiasi indirizzu IP remoto" senza avè da scrive una pulitica per permette esplicitamente u trafficu di risposta. (Senza questu, avete da aghjunghje a regula assai menu sicura "permette i pacchetti à u mo pod da qualsiasi IP".)

Inoltre, conntrack tipicamente migliurà u rendiment di u sistema (riducendu u cunsumu di CPU è a latenza di pacchetti) postu chì solu u primu pacchettu in un flussu.
deve passà per tutta a pila di a rete per determinà ciò chì fà cun ella. Vede u post "Paragone di modi kube-proxy" per vede un esempiu di cumu funziona.

Tuttavia, conttrack hà e so limitazioni ...

Allora induve tuttu andò male?

A tavola di cuntrack hà una dimensione massima configurabile, è s'ellu hè cumpletu, e cunnessione sò generalmente esse rifiutate o abbandunate. Ci hè abbastanza spaziu liberu in a tavula per trattà u trafficu di a maiò parte di l'applicazioni, è questu ùn diventerà mai un prublema. Tuttavia, ci sò uni pochi di scenarii in quale pudete vulete cunsiderà l'usu di a tavola conttrack:

  • U casu più evidenti hè se u vostru servitore gestisce un numeru assai grande di cunnessione attive simultaneamente. Per esempiu, se a vostra tavola di cuntrack hè cunfigurata per 128k entrate, ma avete > 128k cunnessione simultanea, certamenti averete un prublema!
  • Un casu pocu menu evidenti: se u vostru servitore processa un gran numaru di cunnessione per seconda. Ancu s'è e cunnessione sò di corta durata, cuntinueghjanu à esse monitoratu da Linux per qualchì tempu (120s per difettu). Per esempiu, se a vostra tavola conntrack hè cunfigurata per entrate 128k è pruvate à trattà 1100 cunnessione per seconda, superanu a dimensione di a tavola conntrack, ancu s'è e cunnessione sò assai curtu (128k / 120s = 1092 cunnessione / s).

Ci sò parechji tippi di niche di app chì entranu in queste categurie. Inoltre, sè vo avete assai attori cattivi, riempia a tavola di cuntrack di u vostru servitore cù parechje cunnessione semi-aperte puderia esse usatu cum'è parte di un attaccu di denial of service (DOS). In i dui casi, conntrack pò diventà un collu di buttiglia limitante in u vostru sistema. In certi casi, l'aghjustà i paràmetri di a tavola conntrack pò esse abbastanza per risponde à i vostri bisogni - aumentendu a dimensione o riducendu i timeouts di cuntrack (ma se fate male, avete da esse assai prublemi). Per altri casi, serà necessariu bypassà cuntrack per u trafficu aggressivu.

Esempiu veru

Fighjemu un esempiu specificu: un grande fornitore SaaS cù quale avemu travagliatu hà avutu una quantità di servitori memcached nantu à l'ospiti (micca macchine virtuali), ognuna di e quali hà trattatu 50K + cunnessione à cortu termine per seconda.

Anu sperimentatu cù a cunfigurazione di cuntrack, aumentendu e dimensioni di a tavola è riducendu u tempu di seguimentu, ma a cunfigurazione ùn era micca affidabile, u cunsumu di RAM aumentava significativamente, chì era un prublema (in l'ordine di GBytes!), è e cunnessione eranu cusì brevi chì cuntrack ùn hà micca fattu. crea u so usu di prestazione di prestazione (consumu ridottu CPU o latenza di pacchettu).

Si vultò à Calico cum'è una alternativa. I pulitichi di a rete di Calico permettenu micca di utilizà cuntrack per certi tipi di trafficu (aduprendu l'opzione di pulitica doNotTrack). Questu li hà datu u livellu di prestazione chì avianu bisognu, più u livellu di sicurità aghjuntu da Calico.

Chì lunghezze averete da andà per aggira u cuntrack?

  • E pulitiche di rete di micca tracciate devenu esse generalmente simmetriche. In u casu di u fornitore SaaS: e so appiecazioni currenu in a zona prutetta è per quessa, utilizendu a pulitica di a rete, puderanu whitelist trafficu da altre applicazioni specifiche chì anu permessu l'accessu à memcached.
  • A pulitica di micca traccia ùn piglia micca in contu a direzzione di a cunnessione. Cusì, se u servitore memcached hè pirate, pudete teoricamente pruvà à cunnette à qualsiasi di i clienti memcached, sempre chì usa u portu di fonte curretta. In ogni casu, se avete definitu currettamente a pulitica di a rete per i vostri clienti memcached, allora sti tentativi di cunnessione seranu sempre rifiutati da u cliente.
  • A pulitica di micca traccia hè appiicata à ogni pacchettu, in uppusizione à e pulitiche normali, chì sò appiicati solu à u primu pacchettu in un flussu. Questu pò aumentà u cunsumu di CPU per pacchettu perchè a pulitica deve esse applicata per ogni pacchettu. Ma per e cunnessione di corta durata, sta spesa hè equilibrata da a riduzione di u cunsumu di risorse per u processu di cuntrack. Per esempiu, in u casu di un fornitore SaaS, u numeru di pacchetti per ogni cunnessione era assai chjucu, cusì u cunsumu di CPU addiziale quandu applicà pulitiche à ogni pacchettu era ghjustificatu.

Cuminciamu à pruvà

Avemu eseguitu a prova nantu à un solu pod cun un servitore memcached è parechji pods di cliente memcached in esecuzione in nodi remoti in modu chì pudemu eseguisce un gran numaru di cunnessione per seconda. U servitore cù u pod di u servitore memcached avia 8 core è 512k entrate in a tavola cuntrack (a dimensione standard di a tavola cunfigurata per l'ospite).
Avemu misuratu a diffarenza di rendiment trà: nisuna pulitica di rete; cù a pulitica regulare di Calico; è Calico ùn-traccia pulitica.

Per a prima prova, avemu stabilitu u nùmeru di cunnessione à 4.000 per seconda, perchè pudemu fucalizza nantu à a diferenza in u cunsumu di CPU. Ùn ci era micca differenze significative trà nisuna pulitica è a pulitica regulare, ma u cunsumu di CPU aumentatu da u 20% di micca traccia:

Quandu Linux conttrack ùn hè più u vostru amicu

In a seconda prova, avemu lanciatu tante cunnessione quant'è i nostri clienti puderanu generà è misurate u numeru massimu di cunnessione per seconda chì u nostru servitore memcached puderia trattà. Cum'è previstu, i casi "senza pulitica" è "pulitica regulare" anu righjuntu u limitu di cuntrack di più di 4,000 cunnessione per seconda (512k / 120s = 4,369 cunnessione / s). Cù una pulitica di micca traccia, i nostri clienti anu mandatu 60,000 XNUMX cunnessione per seconda senza prublemi. Semu sicuri chì pudemu aumentà stu numeru aghjustendu più clienti, ma credemu chì questi numeri sò digià abbastanza per illustrà u puntu di questu articulu !

Quandu Linux conttrack ùn hè più u vostru amicu

cunchiusioni

Conntrack hè una funzione impurtante di u kernel. Face u so travagliu perfettamente. Hè spessu usatu da cumpunenti chjave di u sistema. Tuttavia, in certi scenarii specifichi, a congestione dovuta à cuntrack supera i benefici normali chì furnisce. In questu scenariu, e pulitiche di rete di Calico ponu esse aduprate per disattivà selettivamente l'usu di cuntrack mentre aumenta a sicurezza di a rete. Per tutti l'altri traffici, conttrack cuntinueghja à esse u vostru amicu!

Leghjite ancu altri articuli nantu à u nostru blog:

Source: www.habr.com

Add a comment