Kuptimi i opsioneve të zbatimit të politikave të rrjetit me Calico

Kuptimi i opsioneve të zbatimit të politikave të rrjetit me Calico

Shtojca e rrjetit Calico ofron një gamë të gjerë politikash rrjeti me një sintaksë të unifikuar për të mbrojtur hostet e harduerit, makinat virtuale dhe podet. Këto politika mund të aplikohen brenda një hapësire emri ose të jenë politika të rrjetit global që zbatohen për pikën fundore të hostit (për të mbrojtur aplikacionet që funksionojnë drejtpërdrejt në host - hosti mund të jetë një server ose një makinë virtuale) ose pika përfundimtare e ngarkesës së punës (për të mbrojtur aplikacionet që funksionojnë në kontejnerë ose makina virtuale të pritura). Politikat Calico ju lejojnë të aplikoni masa sigurie në pika të ndryshme në shtegun e një pakete duke përdorur opsione të tilla si preDNAT, unraracked dhe applyOnForward. Të kuptuarit se si funksionojnë këto opsione mund të ndihmojë në përmirësimin e sigurisë dhe performancës së sistemit tuaj të përgjithshëm. Ky artikull shpjegon thelbin e këtyre opsioneve të politikave Calico (preDNAT, unracked dhe applyOnForward) të aplikuara në pikat fundore të hostit, me theks në atë që ndodh në shtigjet e përpunimit të paketave (zinxhirët iptabels).

Ky artikull supozon se ju keni një kuptim bazë se si funksionojnë politikat e rrjetit Kubernetes dhe Calico. Nëse jo, ju rekomandojmë ta provoni tutorial bazë i politikave të rrjetit и tutorial për mbrojtjen e hostit duke përdorur Calico përpara se të lexoni këtë artikull. Ne gjithashtu presim që ju të keni një kuptim bazë të punës iptables në linux.

prej basme politika e rrjetit global ju lejon të aplikoni një sërë rregullash aksesi sipas etiketave (për grupet e hosteve dhe ngarkesat e punës/pods). Kjo është shumë e dobishme nëse përdorni sisteme heterogjene së bashku - makina virtuale, një sistem direkt në harduer ose një infrastrukturë kubernetes. Përveç kësaj, ju mund të mbroni grupin tuaj (nyjet) duke përdorur një sërë politikash deklarative dhe të aplikoni politikat e rrjetit në trafikun në hyrje (për shembull, përmes shërbimit NodePorts ose IP-ve të jashtme).

Në një nivel themelor, kur Calico lidh një pod me rrjetin (shih diagramin më poshtë), ai e lidh atë me hostin duke përdorur një ndërfaqe virtuale Ethernet (veth). Trafiku i dërguar nga pod vjen te hosti nga kjo ndërfaqe virtuale dhe përpunohet në të njëjtën mënyrë sikur të vinte nga një ndërfaqe fizike e rrjetit. Si parazgjedhje, Calico i emërton këto ndërfaqe caliXXX. Meqenëse trafiku vjen përmes ndërfaqes virtuale, ai kalon nëpër iptables sikur pod të ishte një hop larg. Prandaj, kur trafiku vjen në/nga një pod, ai përcillet nga këndvështrimi i hostit.

Në një nyje Kubernetes që ekzekuton Calico, mund të hartoni një ndërfaqe virtuale (veth) në një ngarkesë pune si më poshtë. Në shembullin e mëposhtëm, mund të shihni se veth#10 (calic1cbf1ca0f8) është i lidhur me cnx-manager-* në hapësirën e emrave të calico-monitoring.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> 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ë zbatimit të politikave të rrjetit me Calico

Duke qenë se Calico krijon një ndërfaqe veth për çdo ngarkesë pune, si i zbaton politikat? Për ta bërë këtë, Calico krijon grepa në zinxhirë të ndryshëm të rrugës së përpunimit të paketave duke përdorur iptables.

Diagrami më poshtë tregon zinxhirët e përfshirë në përpunimin e paketave në iptables (ose nënsistemin netfilter). Kur një paketë arrin përmes një ndërfaqe rrjeti, ajo së pari kalon përmes zinxhirit PREROUTING. Më pas merret një vendim për rutimin, dhe bazuar në këtë, paketa kalon ose përmes INPUT (drejtuar në proceset pritës) ose FORWARD (drejtuar në një pod ose një nyje tjetër në rrjet). Nga procesi lokal, paketa kalon nëpër zinxhirin OUTPUT dhe më pas POSTROUTING përpara se të dërgohet në kabllo.

Vini re se pod është gjithashtu një entitet i jashtëm (i lidhur me veth) për sa i përket përpunimit të iptables. Le të përmbledhim:

  • Trafiku i përcjellë (nat, i drejtuar ose në/nga një pod) kalon përmes zinxhirëve PREROUTING - FORWARD - POSTROUTING.
  • Trafiku drejt procesit pritës lokal kalon përmes zinxhirit PREROUTING - INPUT.
  • Trafiku nga procesi pritës lokal kalon përmes zinxhirit OUTPUT - POSTROUTING.

Kuptimi i opsioneve të zbatimit të politikave të rrjetit me Calico

Calico ofron opsione politikash që ju lejojnë të aplikoni politika në të gjitha zinxhirët. Me këtë në mendje, le të shohim opsionet e ndryshme të konfigurimit të politikave të disponueshme në Calico. Numrat në listën e opsioneve më poshtë korrespondojnë me numrat në diagramin e mësipërm.

  1. Politika e pikës së fundit të ngarkesës së punës (pod).
  2. Politika e pikës fundore të hostit
  3. Opsioni ApplyOnForward
  4. Politika PreDNAT
  5. Politika e pa gjurmuar

Le të fillojmë duke parë se si aplikohen politikat në pikat fundore të ngarkesës së punës (Kubernetes pods ose OpenStack VMs), dhe më pas të shikojmë opsionet e politikave për pikat fundore të hostit.

Pikat përfundimtare të ngarkesës së punës

Politika e pikës fundore të ngarkesës së punës (1)

Ky është një opsion për të mbrojtur podet tuaja kubernetes. Calico mbështet punën me Kubernetes NetworkPolicy, por ofron gjithashtu politika shtesë - Calico NetworkPolicy dhe GlobalNetworkPolicy. Calico krijon një zinxhir për çdo pod (ngarkesa pune) dhe lidh zinxhirët INPUT dhe OUTPUT për ngarkesën e punës në tabelën e filtrit të zinxhirit FORWARD.

Pikat përfundimtare të pritësit

Politika e pikës fundore të hostit (2)

Përveç CNI (ndërfaqja e rrjetit të kontejnerëve), politikat e Calico ofrojnë mundësinë për të mbrojtur vetë hostin. Në Calico, mund të krijoni një pikë fundore të hostit duke specifikuar një kombinim të ndërfaqes së hostit dhe, nëse është e nevojshme, numrat e portave. Zbatimi i politikave për këtë ent arrihet duke përdorur një tabelë filtri në zinxhirët INPUT dhe OUTPUT. Siç mund ta shihni nga diagrami, (2) ato aplikohen në proceset lokale në nyjen/host. Kjo do të thotë, nëse krijoni një politikë që zbatohet për pikën përfundimtare të hostit, ajo nuk do të ndikojë në trafikun që shkon në/nga podet tuaja. Por siguron një ndërfaqe/sintaksë të vetme për bllokimin e trafikut për hostin dhe podet tuaja duke përdorur politikat Calico. Kjo thjeshton shumë procesin e menaxhimit të politikave për një rrjet heterogjen. Konfigurimi i politikave të pikës fundore të hostit për të rritur sigurinë e grupit është një tjetër rast i rëndësishëm përdorimi.

Politika ApplyOnForward (3)

Opsioni ApplyOnForward është i disponueshëm në politikën globale të rrjetit Calico për të lejuar që politikat të zbatohen në të gjithë trafikun që kalon përmes pikës fundore të hostit, duke përfshirë trafikun që do të përcillet nga hosti. Kjo përfshin trafikun e përcjellë në podin lokal ose kudo tjetër në rrjet. Calico kërkon që ky cilësim të aktivizohet për politikat që përdorin PreDNAT dhe të pa gjurmuara, shih seksionet e mëposhtme. Përveç kësaj, ApplyOnForward mund të përdoret për të monitoruar trafikun e hostit në rastet kur përdoret një ruter virtual ose softuer NAT.

Vini re se nëse duhet të aplikoni të njëjtën politikë rrjeti si për proceset e hostit ashtu edhe për pods, atëherë nuk keni nevojë të përdorni opsionin ApplyOnForward. E tëra çfarë ju duhet të bëni është të krijoni një etiketë për pikën përfundimtare të kërkuar dhe ngarkesën e punës (pod). Calico është mjaft i zgjuar për të zbatuar politikën bazuar në etiketa, pavarësisht nga lloji i pikës përfundimtare (pika e pritjes ose ngarkesa e punës).

Politika PreDNAT (4)

Në Kubernetes, portat e entitetit të shërbimit mund të ekspozohen nga jashtë duke përdorur opsionin NodePorts ose, opsionalisht (kur përdorni Calico), duke i reklamuar ato duke përdorur opsionet Cluster IP ose IP të jashtme. Kube-proxy balancon trafikun në hyrje të lidhur me një shërbim në pod-et e shërbimit përkatës duke përdorur DNAT. Nisur nga kjo, si i zbatoni politikat për trafikun që vjen përmes NodePorts? Për të siguruar që këto politika të zbatohen përpara se trafiku të përpunohet nga DNAT (që është një hartë midis host:portit dhe shërbimit përkatës), Calico ofron një parametër për politikën globale të rrjetit të quajtur "preDNAT: e vërtetë".

Kur aktivizohet para-DNAT, këto politika zbatohen në (4) në diagramin - në tabelën e mangle të zinxhirit PREROUTING - menjëherë përpara DNAT. Këtu nuk ndiqet rendi i zakonshëm i politikave, pasi aplikimi i këtyre politikave ndodh shumë më herët në rrugën e përpunimit të trafikut. Megjithatë, politikat preDNAT respektojnë rendin e aplikimit ndërmjet tyre.

Kur krijoni politika me para-DNAT, është e rëndësishme të jeni të kujdesshëm në lidhje me trafikun që dëshironi të përpunoni dhe të lejoni që shumica të refuzohet. Trafiku i shënuar si "lejo" në politikën para-DNAT nuk do të kontrollohet më nga politika e pikës së pritjes, ndërsa trafiku që dështon politikën para-DNAT do të vazhdojë përmes zinxhirëve të mbetur.
Calico e ka bërë të detyrueshme aktivizimin e opsionit applyOnForward kur përdoret preDNAT, pasi sipas definicionit destinacioni i trafikut nuk është zgjedhur ende. Trafiku mund të drejtohet në procesin pritës, ose mund të përcillet në një pod ose një nyje tjetër.

Politika e pa gjurmuar (5)

Rrjetet dhe aplikacionet mund të kenë dallime të mëdha në sjellje. Në disa raste ekstreme, aplikacionet mund të gjenerojnë shumë lidhje jetëshkurtër. Kjo mund të bëjë që conntrack (një komponent thelbësor i grupit të rrjeteve Linux) të mbarojë memorien. Tradicionalisht, për të ekzekutuar këto lloj aplikacionesh në Linux, do t'ju duhet të konfiguroni ose çaktivizoni manualisht conntrack, ose të shkruani rregullat iptables për të anashkaluar conntrack. Politika e pa gjurmuar në Calico është një opsion më i thjeshtë dhe më efikas nëse doni të përpunoni lidhjet sa më shpejt që të jetë e mundur. Për shembull, nëse përdorni masiv memecache ose si masë shtesë e mbrojtjes kundër DDOS.

Lexoje kete blog post (Ose përkthimi ynë) për më shumë informacion, duke përfshirë testet e performancës duke përdorur politikën e pa gjurmuar.

Kur vendosni opsionin "doNotTrack: true" në Calico globalNetworkPolicy, ai bëhet një politikë **e pa gjurmuar** dhe zbatohet shumë herët në tubacionin e përpunimit të paketave Linux. Duke parë diagramin e mësipërm, politikat e pa gjurmuara aplikohen në zinxhirët PREROUTING dhe OUTPUT në tabelën e papërpunuar përpara se të fillojë gjurmimi i lidhjes (conntrack). Kur një paketë lejohet nga politika e pa gjurmuar, ajo shënohet për të çaktivizuar gjurmimin e lidhjes për atë paketë. Do te thote:

  • Politika e pa gjurmuar zbatohet mbi bazën për paketë. Nuk ka asnjë koncept të lidhjes (ose rrjedhës). Mungesa e lidhjeve ka disa pasoja të rëndësishme:
  • Nëse dëshironi të lejoni trafikun e kërkesave dhe të përgjigjeve, ju nevojitet një rregull si për hyrje ashtu edhe për atë dalës (pasi Calico zakonisht përdor conntrack për të shënuar trafikun e përgjigjeve si të lejuar).
  • Politika e pa gjurmuar nuk funksionon për ngarkesat e punës (pods) Kubernetes, sepse në këtë rast nuk ka asnjë mënyrë për të gjurmuar lidhjen dalëse nga pod.
  • NAT nuk funksionon siç duhet me paketat e pa gjurmuara (pasi kerneli ruan hartëzimin NAT në conntrack).
  • Kur kaloni rregullin "lejo të gjitha" në politikën e pa gjurmuar, të gjitha paketat do të shënohen si të pa gjurmuara. Kjo nuk është pothuajse gjithmonë ajo që dëshironi, prandaj është e rëndësishme të jeni shumë selektiv në lidhje me paketat e lejuara nga politikat e pa gjurmuara (dhe të lejoni që shumica e trafikut të kalojë përmes politikave normale të gjurmuara).
  • Politikat e pa gjurmuara aplikohen që në fillim të tubacionit të përpunimit të paketave. Kjo është shumë e rëndësishme për t'u kuptuar kur krijoni politikat e Calico. Mund të keni një politikë pod me porosi:1 dhe një politikë të pa gjurmuar me porosi:1000. Nuk do të ketë rëndësi. Politika e pa gjurmuar do të zbatohet përpara politikës për podin. Politikat e pa gjurmuara respektojnë urdhrin e ekzekutimit vetëm ndërmjet tyre.

Për shkak se një nga qëllimet e politikës doNotTrack është të zbatojë politikën shumë herët në tubacionin e përpunimit të paketave Linux, Calico e bën të detyrueshëm specifikimin e opsionit applyOnForward kur përdoret doNotTrack. Duke iu referuar diagramit të përpunimit të paketave, vini re se politika e pa gjurmuar (5) zbatohet përpara çdo vendimi të rrugëtimit. Trafiku mund të drejtohet në procesin pritës, ose mund të përcillet në një pod ose një nyje tjetër.

Rezultatet e

Ne shikuam opsionet e ndryshme të politikave (Host endpoint, ApplyOnForward, preDNAT dhe Untracked) në Calico dhe se si ato aplikohen përgjatë rrugës së përpunimit të paketave. Të kuptuarit se si funksionojnë ato ndihmon në zhvillimin e politikave efektive dhe të sigurta. Me Calico mund të përdorni një politikë rrjeti global që zbatohet për një etiketë (një grup nyjesh dhe pods) dhe të aplikoni politika me parametra të ndryshëm. Kjo i lejon profesionistët e sigurisë dhe të dizajnit të rrjetit të mbrojnë me lehtësi "çdo gjë" (llojet e pikës fundore) menjëherë duke përdorur një gjuhë të vetme politikash me politikat Calico.

Mirënjohje: Dua të falënderoj Sean Crampton и Alexa Pollitta për shqyrtimin e tyre dhe informacionin e vlefshëm.

Burimi: www.habr.com

Shto një koment