
Plugin-i rrjetor Calico ofron njĂ« gamĂ« tĂ« gjerĂ« politikash rrjetore me njĂ« sintaksĂ« tĂ« unifikuar pĂ«r mbrojtjen e hosteve nĂ« hardware, makinave virtuale dhe pod-Ă«ve. KĂ«to politika mund tĂ« aplikohen brenda njĂ« namespace ose tĂ« jenĂ« politika globale rrjetore tĂ« aplikueshme nĂ« (pĂ«r mbrojtjen e aplikacioneve qĂ« funksionojnĂ« menjĂ«herĂ« nĂ« host â hosti mund tĂ« jetĂ« njĂ« server ose njĂ« makinĂ« virtuale) ose nĂ« (pĂ«r mbrojtjen e aplikacioneve qĂ« funksionojnĂ« nĂ« kontejnerĂ« ose makina virtuale tĂ« vendosura nĂ« host). Politikat Calico lejojnĂ« aplikimin e masave tĂ« sigurisĂ« pĂ«r pika tĂ« ndryshme tĂ« kalimit tĂ« pakove duke pĂ«rdorur parametra tĂ« tillĂ« si preDNAT, unraracked dhe applyOnForward. Kuptimi i mĂ«nyrĂ«s se si funksionojnĂ« kĂ«to opsione mund tĂ« ndihmojĂ« nĂ« rritjen e sigurisĂ« dhe performancĂ«s sĂ« sistemit nĂ« tĂ«rĂ«si. NĂ« kĂ«tĂ« artikull shpjegohet thelbi i kĂ«tyre parametra tĂ« politikave Calico (preDNAT, unraracked dhe applyOnForward) tĂ« aplikuara nĂ« endpointet e hostit, me fokus nĂ« atĂ« qĂ« ndodh nĂ« rrugĂ«t e pĂ«rpunimit tĂ« pakove (zinxhirĂ«t e iptables).
Kyçja e këtij artikulli është që ju të keni një kuptim të parimeve themelore të politikave rrjetore të Kubernetes dhe Calico. Nëse nuk e keni, rekomandojmë të provoni dhe duke përdorur Calico, përpara se të lexoni këtë artikull. Po ashtu, ne supozojmë se keni një kuptim themelor të punës në Linux.
Calico ju lejon tĂ« aplikoni njĂ« set rregullash pĂ«r aksesin sipas etiketave (nĂ« grupe hostesh dhe workloads/pods). Kjo Ă«shtĂ« shumĂ« e dobishme, nĂ«se pĂ«rdorni sisteme tĂ« ndryshme sĂ« bashku â makina virtuale, sistem nĂ« hardware ose infrastrukturĂ« Kubernetes. PĂ«r mĂ« tepĂ«r, mund tĂ« mbrojtni klasterin tuaj (nodat) me njĂ« set politikash deklarative dhe tĂ« aplikoni politika rrjetore pĂ«r trafik tĂ« ardhshĂ«m (pĂ«r shembull, pĂ«rmes shĂ«rbimeve NodePorts ose IP-ve tĂ« jashtme).
Në nivelin bazë, kur Calico lidh një pod me rrjetin (shih diagramin më poshtë), ai e lidh atë me host-in përmes një interfeci virtual Ethernet (veth). Trafiku i dërguar nga pod-i arrin në host nga ky interfec virtual dhe trajtohet ashtu siç do të vinte nga një interfec fizik i rrjetit. Prej default-i, Calico i quan këto interface caliXXX. Pasi që trafiku hyn përmes interfecit virtual, ai kalon përmes iptables, ashtu siç do të ishte nëse pod-i ndodhej në një distancë prej një hop-i. Prandaj, kur trafiku arrin/konvertohet nga pod-i, ai transferohet (forwarded) nga pikëpamja e host-it.
Në nodën Kubernetes, në të cilën është aktivizuar Calico, mund të lidhni interfecin virtual (veth) me workload në këtë mënyrë. Në shembullin më poshtë mund të shihni se veth#10 (calic1cbf1ca0f8) është i lidhur me cnx-manager-* në namespace kalico-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 që Calico krijon një ndërfaqe veth për çdo workload, si i aplikon politikat? Për këtë, Calico krijon hook në zinxhirë të ndryshëm të rrugëve të përpunimit të paketave, duke përdorur iptables.
Në diagramin më poshtë janë paraqitur zinxhirët që marrin pjesë në përpunimin e paketave në iptables (ose në nënsistemin netfilter). Kur një paketë mbërrin përmes ndërfaqes rrjetërore, ajo fillimisht kalon përmes zinxhirit PREROUTING. Pastaj merret një vendim për rrugëzim, dhe mbi këtë bazë paketa kalon ose përmes INPUT (e cila është e orientuar për proceset e hostit), ose përmes FORWARD (e orientuar për pod ose një nodë tjetër në rrjet). Nga një proces lokal, paketa kalon përmes zinxhirit OUTPUT dhe më pas POSTROUTING përpara se të dërgohet përmes kabllit.
Vini re se pod gjithashtu është një objekt i jashtëm (i lidhur me veth) në aspektin e përpunimit të iptables. Le të përmbledhim:
- Trafiku i dĂ«rguar (forwarded) (nat, i rrugĂ«s ose nĂ« / nga pod) kalon pĂ«rmes zinxhirĂ«ve PREROUTING â FORWARD â POSTROUTING.
- Trafiku nĂ« procesin lokal tĂ« hostit kalon pĂ«rmes zinxhirit PREROUTING â INPUT.
- Trafiku nga procesi lokal tĂ« hostit kalon pĂ«rmes zinxhirit OUTPUT â POSTROUTING.

Calico ofron mundësi për politika, përmes të cilave mund të aplikoni politika për të gjitha zinxhirët. Duke e pasur këtë në mendje, le të shqyrtojmë variante të ndryshme të konfigurimit të politikave që janë të disponueshme në Calico. Numrat në listën e mundësive më poshtë përputhen me numrat në diagramin më sipër.
- Politika e pikës së ngarkesës (pod)
- Politika e pikës së hostit
- Mundësia ApplyOnForward
- Politika PreDNAT
- Politika Untracked
Le tĂ« fillojmĂ« me shqyrtimin e mĂ«nyrĂ«s se si aplikohen politikat nĂ« pikĂ«t e ngarkesĂ«s (podâĂ«t e Kubernetes ose VM-tĂ« e OpenStack), dhe pastaj tĂ« shqyrtojmĂ« opsionet e politikave pĂ«r pikĂ«t e hostit.
Pikat e Ngarkesës
Politika e Pikës së Ngarkesës (1)
Kjo Ă«shtĂ« njĂ« mundĂ«si pĂ«r tĂ« mbrojtur podâĂ«t tuaj tĂ« kubernetes. NĂ« Calico mbĂ«shtetet pĂ«rdorimi i Kubernetes NetworkPolicy, por gjithashtu ofron politika tĂ« tjera â Calico NetworkPolicy dhe GlobalNetworkPolicy. Calico krijon njĂ« zinxhir pĂ«r çdo pod (ngarkesĂ«) dhe lidhje nĂ« zinxhirĂ«t INPUT dhe OUTPUT pĂ«r ngarkesĂ«n nĂ« tryezĂ«n e filtrave tĂ« zinxhirit FORWARD.
Pikat e Hostit
Politika e Pikës së Hostit (2)
Përveç CNI (ndërfaqja e rrjetit të kontejnerëve), politikat Calico ofrojnë mundësi mbrojtjeje drejtpërdrejtë për hostin. Në Calico, ju mund të krijoni një endpoint host duke caktuar një kombinim nga ndërfaqja e hostit dhe, nëse është e nevojshme, numrat e porteve. Zbatimi i politikave për këtë entitet arrin përmes tabelës së filtrave në zinxhirin INPUT dhe OUTPUT. Siç tregohet në diagram, ato (2) zbatohen në proceset lokale në node/host. Kjo do të thotë se nëse keni krijuar një politikë që zbatohet për endpoint-in host, ajo nuk do të ndikojë në trafikun që shkon në/nga pod'ët tuaj. Por ajo siguron një ndërfaqe/sintaksë të njëtrajtshme për bllokimin e trafikut për hostin tuaj dhe pod'ët përmes politikave të Calico. Kjo e thjeshton ndjeshëm procesin e menaxhimit të politikave për një rrjet heterogjen. Konfigurimi i politikave të endpoint-it host për përforcimin e mbrojtjes së grumbullit është një rast tjetër i rëndësishëm i përdorimit të tyre.
Politika ApplyOnForward (3)
Opcioni ApplyOnForward është në dispozicion në politikën globale të rrjetit Calico, për të mundësuar aplikimin e politikave për të gjithë trafikun që kalon përmes pikës së hostit, duke përfshirë trafikun që do të tregtohet nga hosti (forwarded). Ky trafikun përfshin atë që dërgohet në pod-in lokal ose në ndonjë vend tjetër në rrjet. Calico kërkon që ky parametër të jetë i aktivizuar për politikat që përdorin PreDNAT dhe untracked, shih seksionet e mëposhtme. Për më tepër, ApplyOnForward mund të përdoret për të ndjekur trafikun e hostit në raste përdorimi të router-it virtual ose NAT-it softuerik.
Vini re se nëse ju nevojitet të aplikoni të njëjtën politikë rrjeti si për proceset e hostit ashtu edhe për pod-et, nuk keni nevojë të përdorni opsionin ApplyOnForward. Mjafton të krijoni një etiketë për hostendpoint dhe workload endpoint (pod). Calico është mjaft i mençur për të aplikuar politikën në bazë të etiketave, pavarësisht nga lloji i endpoint-it (hostendpoint ose workload).
Politika PreDNAT (4)
Në Kubernetes, portet e entitetit shërbim mund të dërgohen jashtë përmes opsionit NodePorts ose, opcionalisht (kur përdoret Calico), duke i shpallur ato përmes opsioneve Cluster IPs ose External IPs. Kube-proxy balancën e trafikëve hyjësor, të lidhur me shërbimin, me pod-ët përkatës të shërbimit duke përdorur DNAT. Duke e marrë parasysh këtë, si mund të aplikoni politikat për trafikun që vjen përmes NodePorts? Që këto politika të aplikohen para se trafiku të përpunohet nga DNAT (i cili është përkufizimi i hostit: portit dhe shërbimit përkatës), Calico ofron një parametër për globalNetworkPolicy që quhet "preDNAT: true".
Kur pre-DNAT Ă«shtĂ« i aktivizuar, kĂ«to politika zbatohen nĂ« (4) nĂ« diagram â nĂ« tabelĂ«n mangle tĂ« zinxhirit PREROUTING â direkt para DNAT. Renditja normale e politikave (order) kĂ«tu nuk respektohet, pasi zbatimi i kĂ«tyre politikave ndodh shumĂ« mĂ« herĂ«t nĂ« rrugĂ«n e pĂ«rpunimit tĂ« trafikut. MegjithatĂ«, politikat preDNAT respektojnĂ« renditjen e zbatimit (order) midis 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 shĂ«nuar si âlejoâ nĂ« politikĂ«n pre-DNAT nuk do tĂ« kontrollohet mĂ« nga politika hostendpoint, ndĂ«rsa trafiku qĂ« dĂ«shton kalimin e politikĂ«s pre-DNAT do tĂ« vazhdojĂ« rrugĂ«n pĂ«rmes zinxhirĂ«ve tĂ« tjerĂ«.
Calico e bëri të detyrueshme aktivizimin e opsionit applyOnForward kur përdorim preDNAT, pasi për definicionin, pika e destinacionit të trafikut ende nuk është zgjedhur. Trafiku mund të drejtohet në procesin e hostit, ose mund të redirektohet në pod ose në një nod tjetër.
Politika e Pa Monitoruar (5)
Të dhënat dhe aplikacionet mund të kenë dallime të mëdha në sjellje. Në disa raste ekstreme, aplikacionet mund të krijojnë shumë lidhje të përkohshme. Kjo mund të çojë në mungesë të memories në conntrack (komponenti kryesor i stack-ut të rrjetit Linux). Tradicionalisht, për të drejtuar aplikacione të tillë në Linux, duhet të konfiguroni manualisht ose të çaktivizoni conntrack, ose të shkruani rregulla iptables për të anashkaluar conntrack. Politikë pa ndjekje në Calico është një opsion më i thjeshtë dhe efektiv, nëse dëshironi të trajtoni lidhjet sa më shpejt të jetë e mundur. Për shembull, nëse përdorni një ose si një masë shtesë mbrojtjeje kundër .
Lexoni këtë (ose ) për informacione të tjera, përfshirë testet e performancës duke përdorur politikën pa ndjekje.
Kur aktivizoni opsionin «doNotTrack: true» në Calico globalNetworkPolicy, bëhet një politikë **e paudhëzuar** dhe aplikohet në etapën më të hershme të procesimit të paketave në Linux. Nëse shikoni diagramin më sipër, politikat e paudhëzuara aplikohen në zinxhirët PREROUTING dhe OUTPUT në tabelën raw, përpara se të nisë ndjekja e lidhjeve (conntrack). Kur një paketë lejohet nga politika e paudhëzuar, ajo shënjohet për të çaktivizuar ndjekjen e lidhjes për këtë paketë. Kjo do të thotë:
- Politika e paudhëzuar aplikohet për secilën paketë. Nuk ka koncept lidhjeje (ose rrjedhe). Mungesa e lidhjeve (connection) sjell 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, atë për hyrjen dhe atë për dalje (së bashku me Calico zakonisht duke përdorur conntrack për të shënuar trafik të përgjigjes si të lejuar).
- Politika e paudhëzuar nuk funksionon për workload Kubernetes (pod'ët), sepse në këtë rast nuk ka asnjë mënyrë për të ndjekur lidhjen e daljes nga pod'i.
- NAT funksionon në mënyrë të papërshtatshme me paketat e paudhëzuara (pasi bërthama mban përputhjen NAT në conntrack).
- Kur kaloni përmes rregullit "lejo gjithçka" në politikën untracked, të gjithë paketat do të shënohen si të pa ndjekura. Kjo pothuajse gjithmonë nuk është ajo që ju nevojitet, prandaj është e rëndësishme të jeni shumë selektiv për paketat e lejuara nga politikat untracked (dhe të lejoni pjesën më të madhe të trafik dhe të kaloni përmes politikave të zakonshme të ndjekura).
- Politikat untracked zbatohen në fillim të tubit të përpunimit të paketave. Kjo është shumë e rëndësishme të kuptohet kur krijoni politikat Calico. Ju mund të keni një politikë për pod me order:1 dhe një politikë untracked me order:1000. Kjo do të ishte e parëndësishme. Politika untracked do të zbatohet para politikës për pod. Politikat untracked respektojnë rendin e ekzekutimit vetëm midis tyre.
Pasi një nga shpërblimet e politikës doNotTrack është për të siguruar përmbushjen e politikës në fazën më të hershme të tubit të përpunimit të paketave Linux, Calico e bën të detyrueshme tregimin e opsionit applyOnForward kur përdoret doNotTrack. Duke iu referuar diagramit të përpunimit të paketave, vini re se politika untracked (5) zbatohet para çdo vendimi për rrugë. Trafiku mund të drejtohet në procesin e pritësit, ose mund të ridrejtohet në pod ose në një nod tjetër.
Përfundimet
Kemi shqyrtuar mundësi të ndryshme politikash (Host endpoint, ApplyOnForward, preDNAT, dhe Untracked) në Calico dhe si i zbatohen ato në rrugën e procesimit të paketimeve. Kuptimi thelbësor i funksionit të tyre ndihmon në zhvillimin e politikave efektive dhe të sigurta. Me Calico, mund të përdorni politikën globale të rrjetit, e cila aplikohet në etiketa (grupin e konektuesve dhe pod-ve) 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' (lloje të endpoint-ëve), duke përdorur një gjuhë të vetme politikash me politikat e Calico.
Faleminderit: Doja të falënderoj dhe për rishikimin e tyre dhe për informacionin e vlefshëm.
Burimi: habr.com
