Kuptimi i mundësive të aplikimit të politikave rrjetore me Calico

Kuptimi i mundësive të aplikimit të politikave rrjetore me Calico

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Ă« endpointin e hostit (pĂ«r mbrojtjen e aplikacioneve qĂ« funksionojnĂ« menjĂ«herĂ« nĂ« host — hosti mund tĂ« jetĂ« njĂ« server ose njĂ« makinĂ« virtuale) ose nĂ« endpointin e ngarkesĂ«s (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 tutorial bazik për politikën e rrjetit dhe tutorial për mbrojtjen e hosteve duke përdorur Calico, përpara se të lexoni këtë artikull. Po ashtu, ne supozojmë se keni një kuptim themelor të punës iptables në Linux.

Calico politika globale e rrjetit 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
...

Kuptimi i mundësive të aplikimit të politikave rrjetore me Calico

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.

Kuptimi i mundësive të aplikimit të politikave rrjetore me Calico

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.

  1. Politika e pikës së ngarkesës (pod)
  2. Politika e pikës së hostit
  3. Mundësia ApplyOnForward
  4. Politika PreDNAT
  5. 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ë memcache ose si një masë shtesë mbrojtjeje kundër DDOS.

Lexoni këtë blog post (ose tonë përkthim) 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 Shon Crumpton dhe Alex Pollitt për rishikimin e tyre dhe për informacionin e vlefshëm.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster