
Savienojumu izsekoÅ”ana (āconntrackā) ir pamatfunkcija Linux kodola tÄ«kla kaudzÄ. TÄ Ä¼auj kodolam sekot visÄm loÄ£iskajÄm tÄ«kla savienojumiem vai plÅ«smÄm, tÄdÄjÄdi identificÄjot visus paketus, kas veido katru plÅ«smu, lai tos varÄtu secÄ«gi apstrÄdÄt kopÄ.
Conntrack ir svarīga kodola funkcija, kas tiek izmantota dažos pamata gadījumos:
- NAT balstÄs uz informÄciju no conntrack, tÄdÄjÄdi tas var vienÄdi apstrÄdÄt visus paketus no vienas plÅ«smas. PiemÄram, kad pods sazinÄs ar Kubernetes pakalpojumu, kube-proxy slodzes balansÄtÄjs izmanto NAT, lai novirzÄ«tu satiksmi uz konkrÄtu podu iekÅ”ÄjÄ klasterÄ«. Conntrack reÄ£istrÄ, ka visiem pakotnÄm, kas adresÄtas pakalpojuma IP, jÄbÅ«t nosÅ«tÄ«tÄm uz to paÅ”u podu, un ka paketes, ko atgriež backend pod, jÄnovirza NAT atpakaļ uz podu, no kura saÅemts pieprasÄ«jums.
- StÄvokļa izsekoÅ”anas ugunsmÅ«ri, piemÄram, Calico, balstÄs uz informÄciju no conntrack, lai pievienotu āatbildesā satiksmi baltajai sarakstÄ. Tas ļauj jums uzrakstÄ«t tÄ«kla politiku, kas saka: āatļaut manam podam savienoties ar jebkuru tÄlu IP adresiā, nevis jÄnosaka politika, kas skaidri atļauj atbildes satiksmi. (Bez tÄ jums bÅ«tu jÄpieŔķir daudz mazÄk droÅ”a norma āatļaut paketes manam pod ar jebkuru IPā.)
TurklÄt conntrack parasti uzlabo sistÄmas veiktspÄju (samazinot procesora laika patÄriÅu un paketes aiztures laiku), jo tikai pirmajam paketam plÅ«smÄ
jÄiet cauri pilnai tÄ«kla kaudzes apstrÄdei, lai noteiktu, ko ar to darÄ«t. Skatiet ierakstu āā, lai redzÄtu piemÄru, kÄ tas darbojas.
TomÄr conntrack ir savi ierobežojumi...
TÄtad, kur viss iegÄja greizajÄ ceļÄ?
Conntrack tabulai ir pielÄgojams maksimÄlais izmÄrs, un, ja tÄ piepildÄs, savienojumi parasti sÄk tikt noraidÄ«ti vai pÄrtraukti. LielÄkajai daļai lietojumu satiksmes sarakstos brÄ«vÄ vieta parasti ir pietiekama, un tas nekad pÄrvÄrtÄ«sies par problÄmu. TomÄr ir daži scenÄriji, kad vajadzÄtu apsvÄrt izmantot conntrack tabulu:
- AcÄ«mredzamÄkais gadÄ«jums ir tad, ja jÅ«su serveris apstrÄdÄ ÄrkÄrtÄ«gi lielu vienlaicÄ«gu aktÄ«vo savienojumu skaitu. PiemÄram, ja jÅ«su conntrack tabula ir konfigurÄta uz 128k ierakstiem, bet jums ir vairÄk nekÄ 128k vienlaicÄ«gu savienojumu, jÅ«s noteikti saskarsities ar problÄmÄm!
- 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 uzskaitÄ«t kaut kÄdu laiku (noklusÄjuma iestatÄ«jums ir 120s). PiemÄram, ja jÅ«su conntrack tabula ir konfigurÄta uz 128 tÅ«kst. ierakstiem un 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 specifiski aplikÄciju veidi, kas ietilpst Å”ajÄs kategorijÄs. TurklÄt, ja jums ir daudz ļaunprÄtÄ«gu lietotÄju, tad jÅ«su servera conntrack tabulas piepildīŔana ar daudziem pusatvÄrtiem savienojumiem var tikt izmantota kÄ uzbrukums, kas pazÄ«stams kÄ "denial of service" (DOS). Abos gadÄ«jumos conntrack var kļūt par ierobežojoÅ”o Å”aurÄs vietas jÅ«su sistÄmÄ. Dažos gadÄ«jumos nav nepiecieÅ”ams neko darÄ«t, vienkÄrÅ”i mainot conntrack tabulas parametrus, palielinot lielumu vai samazinot laika ierobežojumus (bet, ja to izdarÄ«siet nepareizi, jums bÅ«s grÅ«tÄ«bas). Citiem gadÄ«jumiem bÅ«s nepiecieÅ”ams apiet conntrack agresÄ«vas satiksmes gadÄ«jumÄ.
ReÄls piemÄrs
PieÅemsim konkrÄtu piemÄru: viens liels SaaS pakalpojumu sniedzÄjs, ar kuru mÄs strÄdÄjÄm, bija vairÄki memcached serveri uz hostiem (ne virtuÄlajÄm maŔīnÄm), no kuriem katrs apstrÄdÄja 50K+ Ä«slaicÄ«gu savienojumu sekundÄ.
ViÅi eksperimentÄja ar conntrack konfigurÄciju, palielinot tabulu izmÄrus un samazinot izsekoÅ”anas laiku, bet konfigurÄcija bija nestabila, ievÄrojami palielinÄjÄs RAM patÄriÅÅ”, kas bija problÄma (vairÄkos GB!), un savienojumi bija tik Ä«si, ka conntrack nesniedza parasto veiktspÄjas uzlabojumu (samazinot CPU patÄriÅu vai paketes aizturi).
KÄ alternatÄ«vu viÅi vÄrÅ”as pie Calico. Calico tÄ«kla politikas ļauj neizmantot conntrack noteiktam trafika veidam (izmantojot doNotTrack opciju politiku). Tas nodroÅ”inÄja nepiecieÅ”amo veiktspÄjas lÄ«meni, kÄ arÄ« papildu droŔības lÄ«meni, ko sniedz Calico.
Uz ko bÅ«s jÄdodas, lai apejot conntrack?
- TÄ«kla politikas do-not-track parasti jÄbÅ«t simetriskÄm. SaaS pakalpojumu sniedzÄja gadÄ«jumÄ: to lietotnes darbojÄs aiz aizsargÄtas zonas, un tÄpÄc izmantojot tÄ«kla politiku, tie varÄja pievienot baltajÄ sarakstÄ trafiku no citiem konkrÄtiem lietotnÄm, kurÄm tika atļauts piekļūt memcached.
- Politika do-not-track neÅem vÄrÄ savienojuma virzienu. TÄdÄjÄdi, ja memcached serveris tiek uzlauzts, teorÄtiski var mÄÄ£inÄt pieslÄgties jebkuram no memcached klientiem, ja tam ir pareizais sÄkuma ports. TomÄr, ja esat pareizi noteicis tÄ«kla politiku saviem memcached klientiem, tad Å”ie pieslÄgÅ”anÄs mÄÄ£inÄjumi vienalga tiks noraidÄ«ti klienta pusÄ.
- Politika do-not-track tiek piemÄrota katram paketÄm, atŔķirÄ«bÄ no parastajÄm politikÄm, kas tiek piemÄrotas tikai pirmajai paketÄm no plÅ«smas. Tas var palielinÄt CPU resursu patÄriÅu uz vienu paketi, jo katrai paketÄm ir jÄpielieto politika. TaÄu Ä«slaicÄ«gu savienojumu gadÄ«jumÄ Å”is izdevums tiek lÄ«dzsvarots ar resursu patÄriÅa samazinÄÅ”anu, apstrÄdÄjot conntrack. PiemÄram, SaaS pakalpojumu sniedzÄja gadÄ«jumÄ katra savienojuma paketÄm bija ļoti maz, tÄdÄļ papildus CPU resursu izdevumi, piemÄrojot politikas katrai paketÄm, bija pamatoti.
SÄksim testÄÅ”anu
MÄs veicÄm testu vienÄ pod'Ä ar memcached serveri un daudziem pod'iem ar memcached klientiem, kas darbojÄs attÄlinÄtÄs mezglos, lai mÄs varÄtu izveidot ļoti lielu savienojumu skaitu sekundÄ. Memcached servera pod'Ä bija 8 kodoli un 512k ierakstu conntrack tabulÄ (standarta konfigurÄtais tabulas izmÄrs resursdatoram).
MÄs mÄrÄ«jÄm veiktspÄjas atŔķirÄ«bu starp: bez tÄ«kla politikas; ar parasto Calico politiku; un Calico do-not-track politiku.
PirmajÄ testÄ mÄs noteicÄm savienojumu skaitu lÄ«dz 4,000 sekundÄ, tÄpÄc varÄjÄm koncentrÄties uz CPU patÄriÅa atŔķirÄ«bÄm. Å eit nebija bÅ«tisku atŔķirÄ«bu starp politikas neesamÄ«bu un parasto politiku, taÄu do-not-track palielinÄja CPU patÄriÅu par aptuveni 20%.

OtrajÄ testÄ mÄs palaidÄm tik daudz savienojumu, cik tikai varÄja Ä£enerÄt mÅ«su klienti, un mÄrijÄm maksimÄlo savienojumu skaitu sekundÄ, ko spÄja apstrÄdÄt mÅ«su memcached serveris. KÄ gaidÄ«ts, 'bez politikas' un 'parastÄ politika' abi sasniedza conntrack robežu vairÄk nekÄ 4,000 savienojumiem sekundÄ (512k / 120s = 4,369 savienojumi/s). Ar do-not-track politiku mÅ«su klienti sÅ«tÄ«ja 60,000 savienojumus sekundÄ bez jebkÄdÄm problÄmÄm. MÄs esam pÄrliecinÄti, ka varÄtu palielinÄt Å”o skaitli, pieslÄdzot vairÄk klientu, bet jÅ«tam, ka Å”ie cipari jau pietiek, lai ilustrÄtu Ŕī raksta bÅ«tÄ«bu!

SecinÄjums
Conntrack ir svarÄ«ga kodola funkcija. Tas lieliski paveic savu darbu. To bieži izmanto sistÄmas galvenie komponenti. TomÄr noteiktÄs situÄcijÄs, noslogojums dÄļ conntrack pÄrsniedz parastÄs priekÅ”rocÄ«bas, ko tas sniedz. Å ajÄ scenÄrijÄ Calico tÄ«kla politikas var tikt izmantotas, lai izvÄles veidÄ atslÄgtu conntrack izmantoÅ”anu, vienlaikus paaugstinot tÄ«kla droŔības lÄ«meni. Visam pÄrÄjÄm straumÄm conntrack turpinÄs bÅ«t jÅ«su sabiedrotais!
Izlasiet arÄ« citus rakstus mÅ«su emuÄrÄ:
Avots: habr.com
