Kuptimi i opsioneve të përdorimit të politikave rrjetore me Calico

Kuptimi i opsioneve të përdorimit të politikave rrjetore me Calico

Plugin-i rrjetor Calico ofron një gamë të gjerë politikash rrjetore me një sintaksë të unifikuar për të mbrojtur hostet në hardware, makinat virtuale dhe pod-et. Këto politika mund të aplikohen brenda një namespace ose të jenë politika globale rrjetore që aplikohen në endpoint-in e hostit (për të mbrojtur aplikacionet që funksionojnë drejtpërdrejt në host — hosti mund të jetë një server ose një makinë virtuale) ose në endpoint-in e workload-it (për të mbrojtur aplikacionet që funksionojnë në kontejnerë ose makina virtuale të vendosura në host). Politikat Calico lejojnë zbatimin e masave të sigurisë për pika të ndryshme me kalimin e paketeve përmes parametrave si preDNAT, unraracked dhe applyOnForward. Kuptimi i mënyrës se si funksionojnë këto opsione mund të ndihmojë në përmirësimin e sigurisë dhe performancës së sistemit të përgjithshëm. Ky artikull shpjegon thelbin e këtyre parametrave të politikave Calico (preDNAT, unraracked dhe applyOnForward), të aplikuara në endpoint-e të hostit, me fokus në atë që ndodh në rrugët e përpunimit të paketeve (zinxhirët iptables).

Ky artikull supozon se keni një kuptim të parimeve bazike të funksionimit të politikave rrjetore në Kubernetes dhe Calico. Nëse jo, rekomandojmë të provoni tutorialin e politikës rrjetore bazike dhe tutorialin e mbrojtjes së hostit duke përdorur Calico, para se të lexoni këtë artikull. Gjithashtu, ne presim që keni një kuptim të bazik të funksionimit iptables në Linux.

Calico politika globale rrjetore ju lejon të aplikoni një grup rregullash hyrëse përmes labels (në grupe hostesh dhe workloads/pods). Kjo është shumë e dobishme, nëse përdorni së bashku sisteme të ndryshme — makina virtuale, sistemin direkt në hardware ose infrastrukturën Kubernetes. Për më tepër, mund të mbrojni klasterin tuaj (nodat) me një grup politikash deklarative dhe të aplikoni politikat rrjetore në trafikun hyrës (për shembull, përmes shërbimeve NodePorts ose IP-ve të jashtme).

Në nivelin themelor, kur Calico lidh një pod me rrjetin (shih diagramin më poshtë), ai e lidh me hostin përmes një interface të virtualizuar Ethernet (veth). Trafiku i dërguar nga pod-i arrin te hosti nga ky interface virtual dhe përpunon siç do të ndodhte po të ishte dërguar nga një interface fizik i rrjetit. Në mënyrë default, Calico i emëron këto interface si caliXXX. Duke qenë se trafiku vjen përmes një interface virtual, ai kalon përmes iptables, siç do të ndodhte nëse pod-i ishte me një hop të vetëm. Prandaj, kur trafiku arrin/ikën nga pod-i, ai përcillet (forwarded) nga pikëpamja e hostit.

Në nodën Kubernetes, ku është aktivizuar Calico, mund të maposh interface-in virtual (veth) me workload në mënyrën e mëposhtme. Në shembullin e dhënë më poshtë, mund të shihni se veth#10 (calic1cbf1ca0f8) është i lidhur me cnx-manager-* në hapësirën e emrave calico-monitoring.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4:  mtu 1440 qdisc noqueue state UP group default
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever
...

[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m                            ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...

Kuptimi i opsioneve të përdorimit të politikave rrjetore me Calico

Duke marrë parasysh se Calico krijon një interface veth për çdo workload, si e aplikon ai politikat? Për këtë, Calico krijon hook-e në zinxhirë të ndryshëm të rrugëzimit të paketave, duke përdorur iptables.

Në diagramin më poshtë janë paraqitur zinxhirët që përfshihen në përpunimin e paketave në iptables (ose në nënstrukturën netfilter). Kur një paketë arrin përmes interface-it të rrjetit, ajo fillimisht kalon nëpër zinxhirin PREROUTING. Më pas merret një vendim për rrugën, dhe për këtë arsye paketa kalon ose përmes INPUT (e drejtuar për proceset e hostit), ose përmes FORWARD (e drejtuar për pod-in ose një nod tjetër në rrjet). Nga një proces lokal, paketa kalon përmes zinxhirove OUTPUT dhe më pas POSTROUTING para se të dërgohet përmes kabllit.

Vini re se pod-i gjithashtu është një objekt i jashtëm (i lidhur me veth) nga këndvështrimi i përpunimit të iptables. Le të përmbledhim:

  • Trafiku i përcjellur (forwarded) (nat, i rrugës, ose në / nga pod) kalon përmes zinxhirëve PREROUTING — FORWARD — POSTROUTING.
  • Trafiku për procesin lokal të host-it kalon përmes zinxhirit PREROUTING — INPUT.
  • Trafiku nga procesi lokal të host-it kalon përmes zinxhirit OUTPUT — POSTROUTING.

Kuptimi i opsioneve të përdorimit të politikave rrjetore me Calico

Calico ofron mundësi për politika, me ndihmën e të cilave mund të aplikoni politika për të gjitha zinxhirët. Duke pasur parasysh këtë, le të shqyrtojmë mundësitë e ndryshme të konfigurerit të politikave që janë të disponueshme në Calico. Numrat në listën e mundësive më poshtë korrespondrojnë me numrat në diagramin më sipër.

  1. Politika e pikave të punës (pod)
  2. Politika e pikave nga hosti
  3. Mundësia ApplyOnForward
  4. Politika PreDNAT
  5. Politika Untracked

Le të fillojmë duke shqyrtuar se si aplikohen politikat për piketat e punës (pod'ët e Kubernetes ose VM-të e OpenStack), dhe pastaj të shqyrtojmë opsionet e politikave për piketat nga hosti.

Pikat e Punës

Politika e Pikës së Punës (1)

Kjo është një mundësi për të mbrojtur pod'ët tuaj të kubernetes. Në Calico mbështetet funksionimi me Kubernetes NetworkPolicy, por gjithashtu ofron politika shtesë — Calico NetworkPolicy dhe GlobalNetworkPolicy. Calico krijon një zinxhir për çdo pod (workload) dhe lidhje në zinxhirët INPUT dhe OUTPUT për workload në tabelën e filtrave të zinxhirit FORWARD.

Pikat nga Host

Politika e Pikës nga Host (2)

Përveç CNI (interface e rrjetit të konteinerëve), politikat e Calico ofrojnë mundësinë e mbrojtjes direkte të hostit. Në Calico mund të krijoni një host endpoint duke përcaktuar një kombinim të interfaces së hostit dhe, nëse është e nevojshme, numrat e porteve. Aplikimi i politikave për këtë entitet arrihet me ndihmën e tabelës së filtrave në zinxhirët INPUT dhe OUTPUT. Siç shihet nga diagrami, (2) ato aplikohen për proceset lokale në nodën/hostin. Kjo do të thotë se nëse krijoni një politikë që aplikohet për host endpoint, ajo nuk do të ndikojë në trafikun që shkon/del nga pod'ët tuaj. Por përmes saj sigurohet një ndërfaqe/sintaksë e vetme për bllokimin e trafikut për hostin tuaj dhe pod'ët me anë të politikave të Calico. Kjo e thjeshton ndjeshëm procesin e menaxhimit të politikave për një rrjet multiformat. Konfigurimi i politikave të host endpoint për përforcimin e mbrojtjes së klasterit — është një tjetër rast i rëndësishëm i përdorimit të tyre.

Politika ApplyOnForward (3)

Mundësia ApplyOnForward është e disponueshme në politikën globale të rrjetit Calico, për të mundësuar aplikimin e politikave për tërë trafikun që kalon përmes host endpoint-it, duke përfshirë trafikun që do të përcillet nga hosti (forwarded). Ky trafik përfshin atë që dërgohet në pod lokal ose ndonjë vend tjetër në rrjet. Calico kërkon që ky parametr të jetë aktiv për politikat që përdorin PreDNAT dhe untracked, shih seksionet e mëposhtme. Për më tepër, ApplyOnForward gjithashtu mund të përdoret për mbajtjen e gjurmës së trafikut të hostit në rastet kur përdoret një ruter virtual ose NAT programore.

Vini re, se ju nevojitet të aplikoni të njëjtën politikë rrjeti si për proceset e hostit ashtu edhe për pod, nuk është e nevojshme të përdorni opsionin ApplyOnForward. Mjafton të krijoni një etiketë për endpoint-in e hostit dhe endpoint-in e ngarkesës (pod). Calico është mjaft inteligjent për të aplikuar politikën bazuar në etiketat, pavarësisht llojit të endpoint-it (hostendpoint ose workload).

Politika PreDNAT (4)

Në Kubernetes, portet e entitetit shërbim mund të përshkohen jashtë përmes opsionit NodePorts ose, në mënyrë opsionale (në përdorim me Calico), përmes shpalljes së tyre përmes opsioneve Cluster IPs ose External IPs. Kube-proxy balancojnë trafikun e ardhshëm të lidhur me shërbimin, deri te pod-të e shërbimit përkatës, duke përdorur DNAT. Duke e marrë këtë parasysh, si mund të aplikoni politikat për trafikun që vjen përmes NodePorts? Që këto politika të aplikohen para se trafiku të përpunohen nga DNAT (i cili përbën një lidhje mes hostit: portit dhe shërbimit përkatës), Calico ofron një parametër për globalNetworkPolicy, të quajtur "preDNAT: true".

Kur pre-DNAT është i aktivizuar, këto politika realizohen në (4) në diagram — në tabelën mangle të zinxhirit PREROUTING — drejtpërdrejt para DNAT. Renditja e zakonshme e politikave (order) këtu nuk respektohet, pasi aplikimi i këtyre politikave ndodh shumë më herët gjatë procesit të përpunimit të trafikut. Megjithatë, politikate preDNAT respektojnë rendin e aplikimit (order) mes tyre.

Kur krijoni politika me pre-DNAT, është e rëndësishme të jeni të kujdesshëm me trafikun që dëshironi të përpunoni dhe të lejoni shumicën të refuzohet. Trafiku, i cili është shënuar si 'lejo' në politikën pre-DNAT, nuk do të kontrollohet më nga politika e hostendpoint, ndërsa trafiku që dështon kalimin e politikës pre-DNAT do të vazhdojë rrugën e tij përmes zinxhirëve të tjerë.
Calico e bëri të detyrueshme aktivizimin e opsionit applyOnForward kur përdorni preDNAT, pasi në përkufizim, destinacioni i trafikut ende nuk është zgjedhur. Trafiku mund të drejtohet te procesi i hostit, ose mund të ridrejtohet te pod ose te një nod tjetër.

Politika Untracked (5)

Rrjetet dhe aplikacionet mund të kenë dallime të mëdha në sjellje. Në disa raste ekstreme, aplikacionet mund të gjenerojnë shumë lidhje afatshkurtra. Kjo mund të çojë në mungesë memorie për conntrack (komponenti kryesor i grykës së rrjetit Linux). Tradicionalisht, për të nisur aplikacione të këtij lloji në Linux, duhet të konfigurosh manualisht ose të çaktivizosh conntrack, ose të shkruash rregulla iptables për të anashkaluar conntrack. Politika Untracked në Calico është një opsion më i lehtë dhe efektiv, nëse dëshironi të trajtoni lidhjet sa më shpejt të jetë e mundur. Për shembull, nëse përdorni një memcache të madh memcache ose si një masë shtesë mbrojtjeje nga DDOS.

Lexoni këtë blog post (ose tonë përkthim) për më shumë informacione, duke përfshirë testet e performancës gjatë përdorimit të politikës untracked.

Kur vendosni opsionin «doNotTrack: true» në politikat globale të rrjetit Calico, ajo bëhet politikë **untracked** dhe zbaton në fazën më të hershme të procesit të përpunimit të paketimeve në Linux. Nëse shihni diagramin e mësipërm, politikat untracked zbatojnë në zinxhirët PREROUTING dhe OUTPUT në tabelën raw, përpara se të fillojë ndjekja e lidhjeve (conntrack). Kur një paketë lejohet nga politika untracked, ajo etiket është për të çaktivizuar ndjekjen e lidhjes për këtë paketë. Kjo do të thotë:

  • Politika untracked zbatohet për çdo paketë. Nuk ka koncept lidhjeje (ose rrjedhe). Mungesa e lidhjeve ka disa pasoja të rëndësishme:
  • Nëse dëshironi të lejoni si trafikun e kërkesës, ashtu edhe trafikun e përgjigjes, ju nevojitet një rregull për të dyja, hyrëse dhe dalëse (pasi Calico zakonisht përdor conntrack për të etiketuar trafikun e përgjigjes si të lejuar).
  • Politika untracked nuk funksionon për workload Kubernetes (pod’ët), sepse në këtë rast nuk ka mënyrë për të ndjekur lidhjen e dalshme nga pod’i.
  • NAT nuk funksionon siç duhet me paketat e pa ndjekura (pasi bërthama ruan përputhjen NAT në conntrack).
  • Në kalimin përmes rregullit «lejo gjithçka» në politikën untracked, të gjitha paketat do të etiketohen si të pa ndjekura. Kjo pothuajse gjithmonë nuk është ajo që ju nevojitet, prandaj është e rëndësishme të jeni shumë selektiv ndaj paketave e lejuara nga politikët untracked (dhe të lejoni pjesën më të madhe të trafikut të kalojë përmes politikave të zakonshme të ndjekjes).
  • Politikat untracked zbatohen në fillim të procesit të trajtimit të paketave. Kjo është shumë e rëndësishme për t'u kuptuar kur krijoni politikat Calico. Ju mund të keni një politikë për pod'in me order:1 dhe një politikë untracked me order:1000. Kjo nuk do të ketë rëndësi. Politika untracked do të zbatohet para politikës për pod'in. Politikat untracked respektojnë renditjen e zbatimit vetëm mes tyre.

Duke qenë se një nga qëllimet e politikës doNotTrack është të imponojë zbatimin e politikës në një fazë të hershme të procesit të trajtimit të paketave Linux, Calico e bën të detyrueshëm përcaktimin e opsionit applyOnForward kur përdorni doNotTrack. Duke iu referuar diagramit të trajtimit të paketave, vini re se politika untracked (5) zbatohet para çdo vendimi për rrugëzimin. Trafiku mund të jetë i drejtuar në procesin e host-it, ose ai mund të redirektohet në pod ose në një nod tjetër.

Përfundime

Ne shqyrtuam opsionet e ndryshme të politikave (Host endpoint, ApplyOnForward, preDNAT, dhe Untracked) në Calico dhe si ato zbatohen gjatë procesit të trajtimit të paketave. Kuptimi i natyrës së funksionimit të tyre ndihmon në zhvillimin e politikave efektive dhe të sigurta. Me Calico, mund të përdorni politikat globale të rrjetit, të cilat zbatohen ndaj etiketës (grupin e noduleve dhe pod'ave) dhe të aplikoni politika me parametra të ndryshëm. Kjo i lejon specialistët e sigurisë dhe dizajnit të rrjetit të mbrojnë lehtësisht "gjithçka" (llojet e endpoints), duke përdorur një gjuhë të përbashkët politikash me politikat Calico.

Faleminderit: Do të doja të falënderoja Sean Crampton dhe Alex Pollitt për rishikimin e tyre dhe për informacionin e çmuar.

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster