
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Ă« (pĂ«r tĂ« mbrojtur aplikacionet qĂ« funksionojnĂ« drejtpĂ«rdrejt nĂ« host â hosti mund tĂ« jetĂ« njĂ« server ose njĂ« makinĂ« virtuale) ose nĂ« (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 dhe duke përdorur Calico, para se të lexoni këtë artikull. Gjithashtu, ne presim që keni një kuptim të bazik të funksionimit në Linux.
Calico 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
... 
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.

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.
- Politika e pikave të punës (pod)
- Politika e pikave nga hosti
- Mundësia ApplyOnForward
- Politika PreDNAT
- 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 ose si një masë shtesë mbrojtjeje nga .
Lexoni këtë (ose ) 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 dhe për rishikimin e tyre dhe për informacionin e çmuar.
Burimi: habr.com
