Savienojuma izsekoÅ”ana (āconntrackā) ir Linux kodola tÄ«kla steka galvenÄ funkcija. Tas ļauj kodolam izsekot visiem loÄ£iskajiem tÄ«kla savienojumiem vai plÅ«smÄm un tÄdÄjÄdi identificÄt visas paketes, kas veido katru plÅ«smu, lai tÄs varÄtu secÄ«gi apstrÄdÄt kopÄ.
Conntrack ir svarīga kodola funkcija, kas tiek izmantota dažos pamata gadījumos:
NAT paļaujas uz informÄciju no conntrack, lai tas varÄtu vienÄdi apstrÄdÄt visas paketes no vienas straumes. PiemÄram, kad pods piekļūst Kubernetes pakalpojumam, kube starpniekservera slodzes lÄ«dzsvarotÄjs izmanto NAT, lai novirzÄ«tu trafiku uz noteiktu kopu klasterÄ«. Conntrack reÄ£istrÄ, ka konkrÄtajam savienojumam visas IP pakalpojuma paketes ir jÄnosÅ«ta uz vienu un to paÅ”u pod un ka aizmugursistÄmas podziÅa atgrieztÄs paketes ir jÄnosÅ«ta atpakaļ podÄ, no kura tika saÅemts pieprasÄ«jums.
StacionÄrie ugunsmÅ«ri, piemÄram, Calico, paļaujas uz informÄciju no savienojuma celiÅa uz baltÄ saraksta āatbildesā trafiku. TÄdÄjÄdi varat uzrakstÄ«t tÄ«kla politiku, kas saka āatļaut manam podam izveidot savienojumu ar jebkuru attÄlo IP adresiā, nerakstot politiku, lai skaidri atļautu atbildes trafiku. (Bez tÄ jums bÅ«tu jÄpievieno daudz mazÄk droÅ”ais noteikums "atļaut paketes manam podam no jebkura IP".)
TurklÄt conntrack parasti uzlabo sistÄmas veiktspÄju (samazinot CPU patÄriÅu un pakeÅ”u latentumu), jo tikai pirmÄ pakete straumÄ
ir jÄiet cauri visai tÄ«kla stekam, lai noteiktu, ko ar to darÄ«t. SkatÄ«t ziÅu "Kube starpniekservera režīmu salÄ«dzinÄjums", lai redzÄtu piemÄru, kÄ tas darbojas.
TomÄr conntrack ir savi ierobežojumi...
TÄtad, kur tas viss nogÄja greizi?
Conntrack tabulai ir konfigurÄjams maksimÄlais izmÄrs, un, ja tÄ kļūst pilna, savienojumi parasti tiek noraidÄ«ti vai pÄrtraukti. TabulÄ ir pietiekami daudz brÄ«vas vietas, lai apstrÄdÄtu vairuma lietojumprogrammu trafiku, un tas nekad nekļūs par problÄmu. TomÄr ir daži scenÄriji, kuros jÅ«s varÄtu vÄlÄties izmantot conntrack tabulu:
AcÄ«mredzamÄkais gadÄ«jums ir tad, ja jÅ«su serveris apstrÄdÄ ÄrkÄrtÄ«gi lielu skaitu vienlaikus aktÄ«vu savienojumu. PiemÄram, ja jÅ«su conntrack tabula ir konfigurÄta 128 128 ierakstiem, bet jums ir > XNUMX XNUMX vienlaicÄ«gu savienojumu, jÅ«s noteikti saskarsities ar problÄmu!
Nedaudz mazÄk acÄ«mredzams gadÄ«jums: ja jÅ«su serveris apstrÄdÄ Ä¼oti lielu savienojumu skaitu sekundÄ. Pat ja savienojumi ir Ä«slaicÄ«gi, Linux tos turpina uzraudzÄ«t kÄdu laiku (pÄc noklusÄjuma 120 s). PiemÄram, ja jÅ«su conntrack tabula ir konfigurÄta 128k ierakstiem un jÅ«s mÄÄ£inÄt apstrÄdÄt 1100 savienojumus sekundÄ, tie pÄrsniegs conntrack tabulas lielumu, pat ja savienojumi ir ļoti Ä«slaicÄ«gi (128k/120s = 1092 savienojumi/ s).
Ir vairÄki niÅ”as lietotÅu veidi, kas ietilpst Å”ajÄs kategorijÄs. TurklÄt, ja jums ir daudz slikto dalÄ«bnieku, servera conntrack tabulas aizpildÄ«Å”ana ar daudziem daļÄji atvÄrtiem savienojumiem var tikt izmantota pakalpojuma atteikuma (DOS) uzbrukumÄ. Abos gadÄ«jumos conntrack var kļūt par ierobežojoÅ”u saÅ”aurinÄjumu jÅ«su sistÄmÄ. Dažos gadÄ«jumos var pietikt ar conntrack tabulas parametru pielÄgoÅ”anu, lai apmierinÄtu savas vajadzÄ«bas - palielinot izmÄru vai samazinot conntrack taimautus (bet, ja to darÄ«sit nepareizi, jÅ«s saskarsities ar daudzÄm problÄmÄm). Citos gadÄ«jumos bÅ«s nepiecieÅ”ams apiet conntrack agresÄ«vas satiksmes dÄļ.
ReÄls piemÄrs
Sniegsim konkrÄtu piemÄru: vienam lielam SaaS pakalpojumu sniedzÄjam, ar kuru mÄs sadarbojÄmies, resursdatoros (nevis virtuÄlajÄs maŔīnÄs) bija vairÄki atmiÅai saglabÄti serveri, no kuriem katrs apstrÄdÄja 50 XNUMX+ Ä«stermiÅa savienojumu sekundÄ.
ViÅi eksperimentÄja ar conntrack konfigurÄciju, palielinot tabulu izmÄrus un samazinot izsekoÅ”anas laiku, taÄu konfigurÄcija nebija uzticama, ievÄrojami palielinÄjÄs RAM patÄriÅÅ”, kas bija problÄma (GBaitos!), un savienojumi bija tik Ä«si, ka conntrack nedarbojÄs. izveidot savu parasto veiktspÄjas ieguvumu (samazinÄts CPU patÄriÅÅ” vai pakeÅ”u latentums).
ViÅi vÄrsÄs pie Calico kÄ alternatÄ«vas. Calico tÄ«kla politikas ļauj neizmantot conntrack noteiktiem trafika veidiem (izmantojot politikas opciju doNotTrack). Tas nodroÅ”inÄja viÅiem nepiecieÅ”amo veiktspÄjas lÄ«meni, kÄ arÄ« papildu droŔības lÄ«meni, ko nodroÅ”inÄja Calico.
Cik ilgi jums bÅ«s jÄiet, lai apietu conntrack?
NeizsekoÅ”anas tÄ«kla politikÄm parasti jÄbÅ«t simetriskÄm. SaaS nodroÅ”inÄtÄja gadÄ«jumÄ: viÅu lietojumprogrammas darbojÄs aizsargÄtajÄ zonÄ, tÄpÄc, izmantojot tÄ«kla politiku, tÄs varÄja baltajÄ sarakstÄ iekļaut datplÅ«smu no citÄm specifiskÄm lietojumprogrammÄm, kurÄm bija atļauta piekļuve memcached.
NeizsekoÅ”anas politika neÅem vÄrÄ savienojuma virzienu. TÄdÄjÄdi, ja keÅ”atmiÅÄ saglabÄtais serveris ir uzlauzts, teorÄtiski varat mÄÄ£inÄt izveidot savienojumu ar jebkuru no atmiÅÄ saglabÄtajiem klientiem, ja vien tas izmanto pareizo avota portu. TomÄr, ja esat pareizi definÄjis tÄ«kla politiku saviem atmiÅÄ saglabÄtajiem klientiem, Å”ie savienojuma mÄÄ£inÄjumi joprojÄm tiks noraidÄ«ti klienta pusÄ.
NeizsekoÅ”anas politika tiek piemÄrota katrai paketei, atŔķirÄ«bÄ no parastajÄm politikÄm, kas tiek piemÄrotas tikai pirmajai plÅ«smas paketei. Tas var palielinÄt CPU patÄriÅu uz vienu paketi, jo politika ir jÄpiemÄro katrai paketei. Bet Ä«slaicÄ«giem savienojumiem Å”ie izdevumi tiek lÄ«dzsvaroti ar resursu patÄriÅa samazinÄjumu conntrack apstrÄdei. PiemÄram, SaaS nodroÅ”inÄtÄja gadÄ«jumÄ pakeÅ”u skaits katram savienojumam bija ļoti mazs, tÄpÄc papildu CPU patÄriÅÅ”, piemÄrojot politikas katrai paketei, bija pamatots.
SÄksim testÄÅ”anu
MÄs veicÄm testu vienÄ podÄ ar keÅ”atmiÅÄ saglabÄtu serveri un vairÄkiem atmiÅu keÅ”atmiÅÄ saglabÄtiem klientu podiem, kas darbojas attÄlos mezglos, lai mÄs varÄtu palaist ļoti lielu savienojumu skaitu sekundÄ. Serverim ar keÅ”atmiÅÄ saglabÄto servera podziÅu conntrack tabulÄ (standarta konfigurÄtÄs tabulas izmÄrs resursdatoram) bija 8 kodoli un 512 XNUMX ieraksti.
MÄs izmÄrÄ«jÄm veiktspÄjas atŔķirÄ«bu starp: nav tÄ«kla politikas; ar regulÄru Calico politiku; un Calico neizsekoÅ”anas politika.
PirmajÄ testÄ mÄs iestatÄ«jÄm savienojumu skaitu uz 4.000 sekundÄ, lai mÄs varÄtu koncentrÄties uz CPU patÄriÅa atŔķirÄ«bu. Nebija bÅ«tisku atŔķirÄ«bu starp politiku bez politikas un parasto politiku, taÄu neizsekojiet palielinÄto CPU patÄriÅu par aptuveni 20%.
OtrajÄ testÄ mÄs izveidojÄm tik daudz savienojumu, cik mÅ«su klienti varÄja Ä£enerÄt, un izmÄrÄ«jÄm maksimÄlo savienojumu skaitu sekundÄ, ko varÄja apstrÄdÄt mÅ«su keÅ”atmiÅÄ saglabÄtais serveris. KÄ gaidÄ«ts, ābez politikasā un āregulÄras politikasā gadÄ«jumi sasniedza vairÄk nekÄ 4,000 savienojumu sekundÄ (512 k / 120 s = 4,369 60,000 savienojumi/s). Izmantojot neizsekoÅ”anas politiku, mÅ«su klienti bez problÄmÄm nosÅ«tÄ«ja XNUMX XNUMX savienojumu sekundÄ. MÄs esam pÄrliecinÄti, ka mÄs varÄtu palielinÄt Å”o skaitu, pievienojot vairÄk klientu, taÄu mÄs uzskatÄm, ka Å”ie skaitļi jau ir pietiekami, lai ilustrÄtu Ŕī raksta bÅ«tÄ«bu!
SecinÄjums
Conntrack ir svarÄ«ga kodola funkcija. Savu darbu viÅÅ” dara perfekti. To bieži izmanto galvenie sistÄmas komponenti. TomÄr dažos konkrÄtos scenÄrijos sastrÄgumi, kas raduÅ”ies kontrakta dÄļ, pÄrsniedz parastos ieguvumus, ko tas sniedz. Å ajÄ scenÄrijÄ Calico tÄ«kla politikas var izmantot, lai selektÄ«vi atspÄjotu conntrack izmantoÅ”anu, vienlaikus palielinot tÄ«kla droŔību. Visai pÄrÄjai satiksmei conntrack joprojÄm ir jÅ«su draugs!