Вақте ки Linux conntrack дигар дӯсти шумо нест

Вақте ки Linux conntrack дигар дӯсти шумо нест

Пайгирии пайвастшавӣ («conntrack») як хусусияти асосии стеки шабакавии ядрои Linux мебошад. Он ба ядро ​​имкон медиҳад, ки ҳама пайвастагиҳо ё ҷараёнҳои шабакавии мантиқиро пайгирӣ кунад ва ба ин васила ҳамаи пакетҳоеро, ки ҳар як ҷараёнро ташкил медиҳанд, муайян кунад, то ки онҳо пай дар пай коркард шаванд.

Conntrack як хусусияти муҳими ядроест, ки дар баъзе ҳолатҳои асосӣ истифода мешавад:

  • NAT ба иттилоот аз conntrack такя мекунад, то он метавонад ба ҳама пакетҳо аз як ҷараён баробар муносибат кунад. Масалан, вақте ки поддон ба хидмати Kubernetes дастрасӣ пайдо мекунад, мувозинаткунандаи бори kube-proxy NAT-ро истифода мебарад, то трафикро ба як подкоҳи мушаххас дар дохили кластер равона кунад. Conntrack сабт мекунад, ки барои пайвасти додашуда ҳама пакетҳо ба хидмати IP бояд ба ҳамон як подка фиристода шаванд ва пакетҳое, ки аз ҷониби подкоҳи пушти пушти сар баргардонида шудаанд, бояд ба подкале, ки дархост аз он омада буд, баргардонида шаванд.
  • Сипарҳои давлатӣ ба монанди Calico ба маълумот аз пайвастшавӣ то трафики "ҷавоб"-и сафед такя мекунанд. Ин ба шумо имкон медиҳад, ки сиёсати шабакавиро нависед, ки мегӯяд, "иҷозат диҳед, ки ба ман ба ягон суроғаи IP-и дурдаст пайваст шавад" бидуни навиштани сиёсат барои ба таври возеҳ иҷозат додани трафики посух. (Бе ин, шумо бояд қоидаи нисбатан камамнтарро илова кунед "ба пакетҳои ман аз ҳама гуна IP иҷозат диҳед".)

Илова бар ин, conntrack маъмулан кори системаро беҳтар мекунад (бо кам кардани истеъмоли CPU ва таъхири бастаҳо), зеро танҳо бастаи аввал дар ҷараён
бояд аз тамоми стек шабака гузарад, то муайян кунад, ки бо он чӣ кор кардан лозим аст. Ба пост нигаред "Муқоисаи режимҳои kube-proxy"барои дидани мисоли он, ки чӣ тавр кор мекунад.

Аммо, conntrack маҳдудиятҳои худро дорад ...

Пас, дар куҷо ҳамааш хато кард?

Ҷадвали conntrack андозаи максималии танзимшаванда дорад ва агар он пур шавад, пайвастагиҳо одатан рад ё партофта мешаванд. Барои идора кардани трафики аксари барномаҳо дар ҷадвал фазои кофӣ мавҷуд аст ва ин ҳеҷ гоҳ мушкилие нахоҳад шуд. Бо вуҷуди ин, якчанд сенарияҳо мавҷуданд, ки дар онҳо шумо мехоҳед истифодаи ҷадвали пайвасткуниро баррасӣ кунед:

  • Ҳолати аз ҳама равшан ин аст, ки агар сервери шумо шумораи бениҳоят зиёди пайвастҳои ҳамзамон фаъолро идора кунад. Масалан, агар ҷадвали пайвасти шумо барои вурудоти 128k танзим шуда бошад, аммо шумо >128к пайвасти ҳамзамон дошта бошед, шумо бешубҳа ба мушкилот дучор мешавед!
  • Ҳолати каме возеҳ: агар сервери шумо шумораи хеле зиёди пайвастҳоро дар як сония коркард кунад. Ҳатто агар пайвастҳо кӯтоҳмуддат бошанд ҳам, онҳо аз ҷониби Linux барои чанд вақт назорат карда мешаванд (аз рӯи пешфарз 120 сония). Масалан, агар ҷадвали пайвасти шумо барои сабтҳои 128k танзим шуда бошад ва шумо кӯшиш кунед, ки 1100 пайвастро дар як сония идора кунед, онҳо аз андозаи ҷадвали пайвастшавӣ зиёдтар хоҳанд буд, ҳатто агар пайвастҳо хеле кӯтоҳмуддат бошанд (128k/120s = 1092 пайваст/ с).

Якчанд намуди барномаҳое мавҷуданд, ки ба ин категорияҳо дохил мешаванд. Илова бар ин, агар шумо шумораи зиёди фаъолони бад дошта бошед, пур кардани ҷадвали пайвасти сервери шумо бо бисёре аз пайвастагиҳои нимкушода метавонад ҳамчун як қисми ҳамлаи радкунии хидмат (DOS) истифода шавад. Дар ҳарду ҳолат, conntrack метавонад як монеаи маҳдудкунанда дар системаи шумо гардад. Дар баъзе мавридҳо, танзими параметрҳои ҷадвали conntrack метавонад барои қонеъ кардани ниёзҳои шумо кифоя бошад - тавассути зиёд кардани андоза ё кам кардани вақтҳои пайвастшавӣ (аммо агар шумо ин корро нодуруст кунед, шумо ба мушкилоти зиёд дучор мешавед). Дар ҳолатҳои дигар, барои трафики хашмгин аз трафик гузар кардан лозим аст.

Мисоли воқеӣ

Биёед як мисоли мушаххас диҳем: як провайдери бузурги SaaS, ки мо бо он кор мекардем, як қатор серверҳои хотиравӣ дар ҳостҳо (на мошинҳои виртуалӣ) дошт, ки ҳар кадоми онҳо 50K+ пайвастҳои кӯтоҳмуддат дар як сонияро коркард мекарданд.

Онҳо бо конфигуратсияи conntrack, зиёд кардани андозаи ҷадвал ва кам кардани вақти пайгирӣ озмоиш карданд, аммо конфигуратсия эътимоднок набуд, истеъмоли RAM ба таври назаррас афзоиш ёфт, ки ин мушкилот буд (бо тартиби Гбайт!) ва пайвастҳо он қадар кӯтоҳ буданд, ки conntrack кор намекунад. фоидаи муқаррарии иҷрои онро эҷод кунед (ками истеъмоли CPU ё таъхири баста).

Онҳо ҳамчун алтернатива ба Калико муроҷиат карданд. Сиёсати шабакаи Calico ба шумо имкон медиҳад, ки conntrack-ро барои намудҳои муайяни трафик истифода набаред (бо истифода аз имконоти сиёсати doNotTrack). Ин ба онҳо сатҳи иҷрои лозимиро дод ва инчунин сатҳи иловагии амниятро, ки аз ҷониби Calico таъмин карда шудааст.

Барои аз байн рафтани трак ба шумо лозим меояд, ки кадом масофаро тай кунед?

  • Сиёсати шабакаро пайгирӣ накунед, одатан бояд симметрӣ бошанд. Дар мавриди провайдери SaaS: замимаҳои онҳо дар дохили минтақаи муҳофизатшуда кор мекарданд ва аз ин рӯ, бо истифода аз сиёсати шабака, онҳо метавонанд трафикро аз дигар замимаҳои мушаххасе, ки дастрасӣ ба memcached иҷозат дода шудаанд, сафед кунанд.
  • Сиёсати пай дар пай самти алокаро ба назар намегирад. Ҳамин тариқ, агар сервери memcached ҳакерӣ карда шавад, шумо метавонед ба таври назариявӣ кӯшиш кунед, ки ба ягон мизоҷи memcached пайваст шавед, ба шарте ки он порти манбаи дурустро истифода барад. Аммо, агар шумо сиёсати шабакаро барои муштариёни хотираи худ дуруст муайян карда бошед, пас ин кӯшишҳои пайвастшавӣ дар тарафи муштарӣ ҳанӯз рад карда мешаванд.
  • Сиёсати пайгирӣ накардан ба ҳар як баста истифода мешавад, бар хилофи сиёсатҳои муқаррарӣ, ки танҳо ба бастаи аввал дар ҷараён татбиқ мешаванд. Ин метавонад истеъмоли CPU-ро барои як баста зиёд кунад, зеро сиёсат бояд барои ҳар як баста татбиқ карда шавад. Аммо барои пайвастҳои кӯтоҳмуддат, ин хароҷот аз ҳисоби кам кардани истеъмоли захираҳо барои коркарди контекст мувозинат карда мешавад. Масалан, дар мавриди провайдери SaaS, шумораи бастаҳо барои ҳар як пайвастшавӣ хеле кам буд, бинобар ин истеъмоли иловагии CPU ҳангоми татбиқи сиёсатҳо ба ҳар як баста асоснок карда шуд.

Биёед озмоишро оғоз кунем

Мо озмоишро дар як подкоҳи ягона бо сервери хотиравӣ ва як қатор мизоҷҳои хотиравӣ, ки дар гиреҳҳои дурдаст кор мекунанд, гузаронидем, то мо тавонем шумораи хеле зиёди пайвастҳоро дар як сония иҷро кунем. Сервере, ки подтаи сервери memcached дар ҷадвали conntrack 8 ядро ​​ва 512k вуруд дошт (андозаи ҷадвали танзимшудаи стандартӣ барои мизбон).
Мо фарқияти иҷроишро байни: сиёсати шабакавӣ нест; бо сиёсати мунтазами Calico; ва Calico сиёсати пайгирӣ накунад.

Барои санҷиши аввал, мо шумораи пайвастҳоро ба 4.000 дар як сония муқаррар кардем, то мо метавонем ба фарқияти истеъмоли CPU тамаркуз кунем. Байни сиёсат ва сиёсати муқаррарӣ фарқияти назаррас вуҷуд надошт, аммо истеъмоли CPU-ро тақрибан 20% пайгирӣ накунед:

Вақте ки Linux conntrack дигар дӯсти шумо нест

Дар санҷиши дуюм, мо ҳамон қадар пайвастҳоро оғоз кардем, ки мизоҷони мо тавонистанд шумораи максималии пайвастҳоро дар як сония тавлид ва чен карданд, ки сервери memcach-и мо онро идора карда метавонад. Тавре ки интизор мерафт, ҳолатҳои "бе сиёсат" ва "сиёсати муқаррарӣ" ҳарду ба маҳдудияти пайвастшавӣ ба зиёда аз 4,000 пайваст дар як сония расидаанд (512k / 120s = 4,369 пайваст / с). Бо сиёсати пайгирӣ накардан, мизоҷони мо дар як сония 60,000 XNUMX пайвастро бе мушкилот фиристоданд. Мо итминон дорем, ки мо метавонем ин рақамро тавассути илова кардани муштариёни бештар афзоиш диҳем, аммо мо фикр мекунем, ки ин рақамҳо аллакай барои нишон додани нуқтаи ин мақола кофӣ ҳастанд!

Вақте ки Linux conntrack дигар дӯсти шумо нест

хулоса

Conntrack як хусусияти муҳими ядро ​​​​аст. Вай вазифаи худро мукаммал ичро мекунад. Он аксар вақт аз ҷониби ҷузъҳои асосии система истифода мешавад. Бо вуҷуди ин, дар баъзе сенарияҳои мушаххас, сарборӣ дар натиҷаи пайвастшавӣ аз манфиатҳои муқаррарии он зиёдтар аст. Дар ин сенария, сиёсатҳои шабакаи Calico метавонанд барои интихобан ғайрифаъол кардани истифодаи пайвастшавӣ ҳангоми баланд бардоштани амнияти шабака истифода шаванд. Барои ҳама трафики дигар, conntrack дӯсти шумост!

Инчунин мақолаҳои дигарро дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ