Ievads par Kubernetes tÄ«kla politikÄm droŔības profesionÄļiem
PiezÄ«me. tulk.: Raksta autoram Reuvenam Harisonam ir vairÄk nekÄ 20 gadu pieredze programmatÅ«ras izstrÄdÄ, un Å”odien viÅÅ” ir droŔības politikas pÄrvaldÄ«bas risinÄjumu radÄ«Å”anas uzÅÄmuma Tufin CTO un lÄ«dzdibinÄtÄjs. Lai gan viÅÅ” uzskata, ka Kubernetes tÄ«kla politikas ir diezgan spÄcÄ«gs rÄ«ks tÄ«kla segmentÄÅ”anai klasterÄ«, viÅÅ” arÄ« uzskata, ka tÄs nav tik viegli ieviest praksÄ. Å is materiÄls (diezgan apjomÄ«gs) ir paredzÄts, lai uzlabotu speciÄlistu izpratni par Å”o jautÄjumu un palÄ«dzÄtu viÅiem izveidot nepiecieÅ”amÄs konfigurÄcijas.
MÅ«sdienÄs daudzi uzÅÄmumi arvien vairÄk izvÄlas Kubernetes savu lietojumprogrammu palaiÅ”anai. Interese par Å”o programmatÅ«ru ir tik liela, ka daži Kubernetes sauc par "jauno operÄtÄjsistÄmu datu centram". PamazÄm Kubernetes (jeb k8s) sÄk uztvert kÄ kritisku biznesa sastÄvdaļu, kas prasa nobrieduÅ”u biznesa procesu organizÄÅ”anu, tostarp tÄ«kla droŔību.
DroŔības speciÄlistiem, kuri ir neizpratnÄ par darbu ar Kubernetes, patiesÄ atklÄsme var bÅ«t platformas noklusÄjuma politika: atļaut visu.
Å Ä« rokasgrÄmata palÄ«dzÄs izprast tÄ«kla politiku iekÅ”Äjo struktÅ«ru; saprast, kÄ tie atŔķiras no noteikumiem par parastajiem ugunsmÅ«riem. Tas arÄ« aptvers dažas nepilnÄ«bas un sniegs ieteikumus, lai palÄ«dzÄtu aizsargÄt lietojumprogrammas vietnÄ Kubernetes.
Kubernetes tīkla politikas
Kubernetes tÄ«kla politikas mehÄnisms ļauj pÄrvaldÄ«t platformÄ izvietoto lietojumprogrammu mijiedarbÄ«bu tÄ«kla slÄnÄ« (treÅ”ais OSI modelÄ«). TÄ«kla politikÄm trÅ«kst dažu moderno ugunsmÅ«ru uzlaboto lÄ«dzekļu, piemÄram, OSI Layer 7 izpildes un draudu noteikÅ”anas, taÄu tÄs nodroÅ”ina pamata tÄ«kla droŔības lÄ«meni, kas ir labs sÄkumpunkts.
TÄ«kla politikas kontrolÄ saziÅu starp podiem
Kubernetes darba slodzes ir sadalÄ«tas pa podiem, kas sastÄv no viena vai vairÄkiem kopÄ izvietotiem konteineriem. Kubernetes pieŔķir katram podam IP adresi, kas ir pieejama no citiem podiem. Kubernetes tÄ«kla politikas nosaka piekļuves tiesÄ«bas podiÅu grupÄm tÄdÄ paÅ”Ä veidÄ, kÄ droŔības grupas mÄkonÄ« tiek izmantotas, lai kontrolÄtu piekļuvi virtuÄlÄs maŔīnas gadÄ«jumiem.
Tīkla politiku noteikŔana
TÄpat kÄ citi Kubernetes resursi, tÄ«kla politikas ir norÄdÄ«tas YAML. TÄlÄk esoÅ”ajÄ piemÄrÄ lietojumprogramma balance piekļuve postgres:
(PiezÄ«me. tulk.: Å”is ekrÄnuzÅÄmums, tÄpat kÄ visi nÄkamie lÄ«dzÄ«gie, tika izveidots nevis izmantojot vietÄjos Kubernetes rÄ«kus, bet gan rÄ«ku Tufin Orca, kuru izstrÄdÄja oriÄ£inÄlÄ raksta autora uzÅÄmums un kas minÄts materiÄla beigÄs.)
Lai definÄtu savu tÄ«kla politiku, jums bÅ«s nepiecieÅ”amas pamatzinÄÅ”anas par YAML. Å Ä«s valodas pamatÄ ir atkÄpe (norÄda atstarpes, nevis tabulÄÅ”anas zÄ«mes). AtkÄpes elements pieder tuvÄkajam atkÄpes elementam virs tÄ. Jauns saraksta elements sÄkas ar defisi, visiem pÄrÄjiem elementiem ir forma atslÄgas vÄrtÄ«ba.
Aprakstot politiku YAML, izmantojiet kubectllai to izveidotu klasterī:
kubectl create -f policy.yaml
TÄ«kla politikas specifikÄcija
Kubernetes tÄ«kla politikas specifikÄcijÄ ir iekļauti Äetri elementi:
podSelector: definÄ aplikumus, uz kuriem attiecas Ŕī politika (mÄrÄ·i) - nepiecieÅ”ams;
policyTypes: norÄda, kÄda veida politikas ir iekļautas Å”ajÄ: ingress un/vai izeja - pÄc izvÄles, bet iesaku to skaidri norÄdÄ«t visos gadÄ«jumos;
LÅ«dzu, Åemiet vÄrÄ, ka visiem Äetriem elementiem nav jÄbÅ«t iekļautiem. Tas ir tikai obligÄti podSelector, pÄc vÄlÄÅ”anÄs var izmantot citus parametrus.
Ja jÅ«s izlaižat policyTypes, politika tiks interpretÄta Å”Ädi:
PÄc noklusÄjuma tiek pieÅemts, ka tas definÄ ieejas pusi. Ja politikÄ tas nav skaidri norÄdÄ«ts, sistÄma pieÅems, ka visa satiksme ir aizliegta.
UzvedÄ«bu izejas pusÄ noteiks atbilstoÅ”Ä izejas parametra esamÄ«ba vai neesamÄ«ba.
Lai izvairÄ«tos no kļūdÄm, es iesaku vienmÄr skaidri norÄdiet policyTypes.
SaskaÅÄ ar iepriekÅ” minÄto loÄ£iku, ja parametri ingress un / vai egress izlaist, politika aizliedz visu trafiku (skatiet tÄlÄk sadaļu "NoÅemÅ”anas kÄrtula").
NoklusÄjuma politika ir Atļaut
Ja nav noteiktas politikas, Kubernetes pÄc noklusÄjuma atļauj visu trafiku. Visas pÄkstis var brÄ«vi apmainÄ«ties ar informÄciju savÄ starpÄ. No droŔības viedokļa tas var Ŕķist pretrunÄ, taÄu atcerieties, ka Kubernetes sÄkotnÄji izstrÄdÄja izstrÄdÄtÄji, lai nodroÅ”inÄtu lietojumprogrammu savietojamÄ«bu. TÄ«kla politikas tika pievienotas vÄlÄk.
VÄrdtelpas
VÄrdtelpas ir Kubernetes sadarbÄ«bas mehÄnisms. Tie ir paredzÄti, lai izolÄtu loÄ£iskÄs vides viena no otras, savukÄrt saziÅa starp telpÄm ir atļauta pÄc noklusÄjuma.
TÄpat kÄ lielÄkÄ daļa Kubernetes komponentu, tÄ«kla politikas atrodas noteiktÄ nosaukumvietÄ. BlokÄ metadata varat norÄdÄ«t, kurai vietai politika pieder:
Ja nosaukumvieta nav skaidri norÄdÄ«ta metadatos, sistÄma izmantos kubectl norÄdÄ«to nosaukumvietu (pÄc noklusÄjuma namespace=default):
kubectl apply -n my-namespace -f namespace.yaml
Iesaku skaidri norÄdiet nosaukumvietu, ja vien nerakstÄt politiku, kuras mÄrÄ·auditorija ir vairÄkas nosaukumvietas vienlaikus.
Galvenais elements podSelector politikÄ atlasÄ«s aplikumus no nosaukumvietas, kurai politika pieder (tai ir liegta piekļuve aplikumiem no citas nosaukumvietas).
TÄpat podSelectors ieejas un izejas blokos var atlasÄ«t aplikumus tikai no savas nosaukumvietas, ja vien jÅ«s tos neapvienojat ar namespaceSelector (par to tiks runÄts sadaÄ¼Ä āFiltrÄt pÄc nosaukumvietÄm un aplikumiemā).
Politikas nosaukŔanas noteikumi
Politiku nosaukumi ir unikÄli vienÄ nosaukumvietÄ. VienÄ vietÄ nevar bÅ«t divas politikas ar vienÄdu nosaukumu, taÄu dažÄdÄs vietÄs var bÅ«t politikas ar vienÄdu nosaukumu. Tas ir noderÄ«gi, ja vÄlaties atkÄrtoti piemÄrot vienu un to paÅ”u politiku vairÄkÄs vietÄs.
ÄŖpaÅ”i man patÄ«k viena no nosaukÅ”anas metodÄm. Tas sastÄv no nosaukumvietas nosaukuma apvienoÅ”anas ar mÄrÄ·a pÄkstiem. PiemÄram:
Varat pievienot pielÄgotas etiÄ·etes Kubernetes objektiem, piemÄram, aplikumiem un nosaukumvietÄm. EtiÄ·etes (uzlÄ«mes - tagi) ir lÄ«dzvÄrtÄ«gi tagiem mÄkonÄ«. Lai atlasÄ«tu Kubernetes tÄ«kla politikas, tiek izmantotas etiÄ·etes pÄkstisuz kuriem tie attiecas:
podSelector:
matchLabels:
role: db
ā¦ vai nosaukumvietasuz kuriem tie attiecas. Å ajÄ piemÄrÄ tiek atlasÄ«ti visi aplikumi nosaukumvietÄs ar atbilstoÅ”ajÄm iezÄ«mÄm:
Viens piesardzÄ«ba: lietojot namespaceSelectorpÄrliecinieties, vai atlasÄ«tajÄs nosaukumvietÄs ir ietverta pareizÄ etiÄ·ete. Å emiet vÄrÄ, ka iebÅ«vÄtÄs nosaukumvietas, piemÄram, default Šø kube-system, pÄc noklusÄjuma nesatur etiÄ·etes.
Varat pievienot iezÄ«mi vietai, piemÄram:
kubectl label namespace default namespace=default
TajÄ paÅ”Ä laikÄ sadaÄ¼Ä nosaukumu telpa metadata jÄattiecas uz faktisko telpas nosaukumu, nevis etiÄ·eti:
UgunsmÅ«ra politikas sastÄv no noteikumiem ar avotiem un galamÄrÄ·iem. Kubernetes tÄ«kla politikas tiek definÄtas mÄrÄ·im ā apvidu kopai, uz kuru tÄs attiecas, un pÄc tam tiek iestatÄ«ti ieejas un/vai izejas trafika noteikumi. MÅ«su piemÄrÄ politikas mÄrÄ·is bÅ«s visi nosaukumvietas aplikumi default ar etiÄ·eti ar atslÄgu app un nozÄ«me db:
ApakÅ”nodaļa ingress Å”ajÄ politikÄ atver ienÄkoÅ”o datplÅ«smu mÄrÄ·a podiem. Citiem vÄrdiem sakot, iekļūŔana ir avots, un mÄrÄ·is ir atbilstoÅ”ais galamÄrÄ·is. TÄpat izeja ir galamÄrÄ·is, un mÄrÄ·is ir tÄ avots.
Tas ir lÄ«dzvÄrtÄ«gs diviem ugunsmÅ«ra noteikumiem: Ingress ā Target; MÄrÄ·is ā Izeja.
Izeja un DNS (svarīgi!)
Ierobežojot izejoÅ”o trafiku, pievÄrsiet Ä«paÅ”u uzmanÄ«bu DNS - Kubernetes izmanto Å”o pakalpojumu, lai kartÄtu pakalpojumus ar IP adresÄm. PiemÄram, Ŕī politika nedarbosies, jo neesat atļÄvis lietojumprogrammu balance piekļūt DNS:
PÄdÄjais elements to ir tukÅ”s, un tÄpÄc tas netieÅ”i atlasa visas pÄkstis visÄs nosaukumvietÄs, ļaujot balance nosÅ«tiet DNS vaicÄjumus attiecÄ«gajam Kubernetes pakalpojumam (parasti tas darbojas telpÄ kube-system).
Å Ä« pieeja darbojas, neskatoties uz to pÄrÄk pieļaujams un nedroÅ”s, jo tas ļauj DNS vaicÄjumus novirzÄ«t Ärpus klastera.
Varat to uzlabot trÄ«s secÄ«gÄs darbÄ«bÄs.
1. Atļaut tikai DNS vaicÄjumus laikÄ klasteri, pievienojot namespaceSelector:
2. Atļaut DNS vaicÄjumus tikai nosaukumvietÄ kube-system.
Lai to izdarÄ«tu, nosaukumu telpai jÄpievieno etiÄ·ete kube-system: kubectl label namespace kube-system namespace=kube-system - un pierakstiet to politikÄ, izmantojot namespaceSelector:
3. ParanoiÄ·i var iet vÄl tÄlÄk un ierobežot DNS vaicÄjumus lÄ«dz noteiktam DNS pakalpojumam kube-system. SadaÄ¼Ä āFiltrÄt pÄc nosaukumvietÄm UN aplikumiemā tiks parÄdÄ«ts, kÄ to panÄkt.
VÄl viena iespÄja ir atrisinÄt DNS nosaukumvietas lÄ«menÄ«. Å ajÄ gadÄ«jumÄ tas nav jÄatver katram pakalpojumam:
TukÅ”s podSelector atlasa visas pÄkstis nosaukumvietÄ.
PirmÄ spÄle un noteikumu secÄ«ba
Parastos ugunsmÅ«ros darbÄ«bu (Atļaut vai Aizliegt) paketÄ nosaka pirmais noteikums, kuram tÄ atbilst. Kubernetes politikÄ politiku secÄ«bai nav nozÄ«mes.
PÄc noklusÄjuma, ja nav iestatÄ«tas politikas, ir atļauta saziÅa starp podiem un tie var brÄ«vi apmainÄ«ties ar informÄciju. Kad sÄkat formulÄt politikas, katra apgrupa, kuru ietekmÄ vismaz viena no tÄm, tiek izolÄta atbilstoÅ”i visu to politiku sadalÄ«jumam (loÄ£iski VAI), kas to atlasÄ«ja. AplikÄcijas, kuras neietekmÄ neviena politika, paliek atvÄrtas.
Varat mainÄ«t Å”o darbÄ«bu, izmantojot noÅemÅ”anas kÄrtulu.
NoÅemÅ”anas kÄrtula (āNoliegtā)
UgunsmÅ«ra politikas parasti aizliedz jebkÄdu trafiku, kas nav skaidri atļauta.
Kubernetes darbÄ«bu nevar noliegttomÄr lÄ«dzÄ«gu efektu var panÄkt ar parastu (atļaujoÅ”u) politiku, atlasot tukÅ”u avota aplikumu grupu (iekļūŔanu):
Tas ļauj piekļūt no visi aplikumi visÄs nosaukumvietÄs (un visi IP) uz jebkuru aplikumu nosaukumvietÄ default. Å Ä« darbÄ«ba ir iespÄjota pÄc noklusÄjuma, tÄpÄc parasti tÄ nav jÄdefinÄ sÄ«kÄk. TomÄr dažreiz jums var bÅ«t nepiecieÅ”ams Ä«slaicÄ«gi atspÄjot dažas Ä«paÅ”as atļaujas, lai diagnosticÄtu problÄmu.
Noteikumu var saÅ”aurinÄt, lai atļautu piekļuvi tikai Ä«paÅ”s pÄkstu komplekts (app:balance) nosaukumvietÄ default:
Politikas tiek apvienotas, izmantojot loÄ£isko VAI trÄ«s lÄ«meÅos; Katras podziÅas atļaujas tiek iestatÄ«tas saskaÅÄ ar atŔķirÄ«bu no visÄm politikÄm, kas to ietekmÄ:
1. Laukos from Šø to Var definÄt trÄ«s veidu elementus (visi tiek apvienoti, izmantojot VAI):
namespaceSelector ā atlasa visu nosaukumu telpu;
podSelector ā atlasa pÄkstis;
ipBlock ā atlasa apakÅ”tÄ«klu.
TurklÄt elementu skaits (pat identiski) apakÅ”sadaļÄs from/to nav ierobežots. Visi tie tiks apvienoti ar loÄ£isko VAI.
2. Politikas sadaÄ¼Ä ingress var bÅ«t daudz elementu from (kombinÄts ar loÄ£isko VAI). TÄpat sadaļa egress var ietvert daudzus elementus to (arÄ« apvienots ar disjunkciju):
3. DažÄdas politikas tiek apvienotas arÄ« ar loÄ£isko VAI
Bet, tos apvienojot, ir viens ierobežojums norÄdÄ«jaKriss KÅ«nijs: Kubernetes var apvienot tikai politikas ar dažÄdÄm policyTypes (Ingress vai Egress). Politikas, kas nosaka ieeju (vai izeju), pÄrrakstÄ«s viena otru.
AttiecÄ«bas starp nosaukumu telpÄm
PÄc noklusÄjuma informÄcijas apmaiÅa starp nosaukumvietÄm ir atļauta. To var mainÄ«t, izmantojot aizlieguma politiku, kas ierobežos izejoÅ”o un/vai ienÄkoÅ”o trafiku nosaukumvietÄ (skatiet iepriekÅ” sadaļu āNoÅemÅ”anas kÄrtulaā).
Kad esat bloÄ·Äjis piekļuvi nosaukumvietai (skatiet iepriekÅ” minÄto āNoÅemÅ”anas kÄrtuluā), varat veikt izÅÄmumus noraidÄ«Å”anas politikai, atļaujot savienojumus no noteiktas nosaukumvietas, izmantojot namespaceSelector:
RezultÄtÄ visas pÄkstis nosaukumvietÄ default bÅ«s piekļuve pÄkstÄ«m postgres vÄrdu telpÄ database. Bet ko darÄ«t, ja vÄlaties atvÄrt piekļuvi postgres tikai noteiktas pÄkstis nosaukumvietÄ default?
FiltrÄjiet pÄc nosaukumvietÄm un aplikumiem
Kubernetes versija 1.11 un jaunÄka versija ļauj apvienot operatorus namespaceSelector Šø podSelector izmantojot loÄ£isko UN. Tas izskatÄs Å”Ädi:
KÄpÄc tas tiek interpretÄts kÄ UN, nevis parastÄ VAI?
LÅ«dzu, Åemiet vÄrÄ, ka podSelector nesÄkas ar defisi. YAML tas nozÄ«mÄ to podSelector un stÄvot viÅam priekÅ”Ä namespaceSelector atsaukties uz to paÅ”u saraksta elementu. TÄpÄc tie tiek apvienoti ar loÄ£isko UN.
Pirms tam pievieno defisi podSelector rezultÄtÄ parÄdÄ«sies jauns saraksta elements, kas tiks apvienots ar iepriekÅ”Äjo namespaceSelector izmantojot loÄ£isko VAI.
Lai atlasÄ«tu pÄkstis ar noteiktu etiÄ·eti visÄs nosaukumvietÄs, ievadiet tukÅ”u namespaceSelector:
Noteikumi ugunsmÅ«rim ar vairÄkiem objektiem (resursdatoriem, tÄ«kliem, grupÄm) tiek apvienoti, izmantojot loÄ£isko VAI. Å is noteikums darbosies, ja pakeÅ”u avots sakrÄ«t Host_1 VAI Host_2:
Gluži pretÄji, Kubernetes dažÄdÄs etiÄ·etes iekÅ”Ä podSelector vai namespaceSelector ir apvienoti ar loÄ£isko UN. PiemÄram, Ŕī kÄrtula atlasÄ«s aplikumus, kuriem ir abas etiÄ·etes, role=db Š version=v2:
podSelector:
matchLabels:
role: db
version: v2
TÄda pati loÄ£ika attiecas uz visu veidu operatoriem: politikas mÄrÄ·a atlasÄ«tÄjiem, pod atlasÄ«tÄjiem un nosaukumvietas atlasÄ«tÄjiem.
ApakŔtīkli un IP adreses (IPBlocks)
UgunsmÅ«ri izmanto VLAN, IP adreses un apakÅ”tÄ«klus, lai segmentÄtu tÄ«klu.
ProgrammÄ Kubernetes IP adreses aplikÄcijÄm tiek pieŔķirtas automÄtiski, un tÄs var bieži mainÄ«ties, tÄpÄc etiÄ·etes tiek izmantotas, lai tÄ«kla politikÄs atlasÄ«tu aplikumus un nosaukumvietas.
ApakÅ”tÄ«kli (ipBlocks) tiek izmantoti, pÄrvaldot ienÄkoÅ”os (ieejas) vai izejoÅ”os (izejas) ÄrÄjos (ziemeļu-dienvidu) savienojumus. PiemÄram, Ŕī politika tiek atvÄrta visiem aplikumiem no nosaukumvietas default piekļuve Google DNS pakalpojumam:
TukÅ”ais aplikumu atlasÄ«tÄjs Å”ajÄ piemÄrÄ nozÄ«mÄ āatlasÄ«t visus aplikumus nosaukumvietÄā.
Å Ä« politika ļauj piekļūt tikai 8.8.8.8; piekļuve jebkurai citai IP ir aizliegta. TÄtad bÅ«tÄ«bÄ jÅ«s esat bloÄ·Äjis piekļuvi iekÅ”Äjam Kubernetes DNS pakalpojumam. Ja joprojÄm vÄlaties to atvÄrt, skaidri norÄdiet to.
Parasti ipBlocks Šø podSelectors ir savstarpÄji izslÄdzoÅ”as, jo netiek izmantotas podziÅu iekÅ”ÄjÄs IP adreses ipBlocks. NorÄdot iekÅ”Äjie IP podi, jÅ«s faktiski atļausiet savienojumus uz/no podiem ar Ŕīm adresÄm. PraksÄ jÅ«s nezinÄt, kuru IP adresi izmantot, tÄpÄc tÄs nevajadzÄtu izmantot, lai atlasÄ«tu pÄkstis.
PretpiemÄrs: tÄlÄk norÄdÄ«tÄ politika ietver visus IP un tÄdÄjÄdi ļauj piekļūt visiem citiem aplikumiem.
Varat atvÄrt piekļuvi tikai ÄrÄjiem IP adresÄm, izÅemot podziÅu iekÅ”ÄjÄs IP adreses. PiemÄram, ja jÅ«su apakÅ”tÄ«kla apakÅ”tÄ«kls ir 10.16.0.0/14:
Parasti podi klausÄs vienu portu. Tas nozÄ«mÄ, ka politikÄs var vienkÄrÅ”i nenorÄdÄ«t portu numurus un atstÄt visu pÄc noklusÄjuma. TomÄr ir ieteicams padarÄ«t politikas pÄc iespÄjas ierobežojoÅ”Äkas, tÄpÄc dažos gadÄ«jumos joprojÄm varat norÄdÄ«t portus:
Å emiet vÄrÄ, ka atlasÄ«tÄjs ports attiecas uz visiem bloka elementiem to vai from, kas satur. Lai dažÄdÄm elementu kopÄm norÄdÄ«tu dažÄdus portus, sadaliet ingress vai egress vairÄkÄs apakÅ”sadaļÄs ar to vai from un katrÄ reÄ£istrÄjiet savas ostas:
Ja pilnÄ«bÄ izlaižat porta definÄ«ciju (ports), tas nozÄ«mÄ visus protokolus un visus portus;
Ja izlaižat protokola definÄ«ciju (protocol), tas nozÄ«mÄ TCP;
Ja izlaižat porta definÄ«ciju (port), tas nozÄ«mÄ visas ostas.
LabÄkÄ prakse: nepaļaujieties uz noklusÄjuma vÄrtÄ«bÄm, skaidri norÄdiet, kas jums nepiecieÅ”ams.
LÅ«dzu, Åemiet vÄrÄ, ka jums ir jÄizmanto pod porti, nevis apkalpoÅ”anas porti (vairÄk par to nÄkamajÄ rindkopÄ).
Vai aplikÄcijÄm vai pakalpojumiem ir noteiktas politikas?
Parasti Kubernetes podi piekļūst viens otram, izmantojot pakalpojumu ā virtuÄlo slodzes balansÄtÄju, kas novirza trafiku uz aplikÄcijÄm, kas ievieÅ” pakalpojumu. VarÄtu domÄt, ka tÄ«kla politikas kontrolÄ piekļuvi pakalpojumiem, taÄu tas tÄ nav. Kubernetes tÄ«kla politikas darbojas uz pod portiem, nevis pakalpojumu portiem.
PiemÄram, ja pakalpojums klausÄs 80. portu, bet novirza datplÅ«smu uz 8080. portu, tÄ«kla politikÄ ir jÄnorÄda tieÅ”i 8080.
Å Äds mehÄnisms jÄuzskata par neoptimÄlu: ja pakalpojuma iekÅ”ÄjÄ struktÅ«ra (kuru porti klausÄs) mainÄs, tÄ«kla politikas bÅ«s jÄatjaunina.
Jauna arhitektÅ«ras pieeja, izmantojot Service Mesh (piemÄram, par Istio skatÄ«t zemÄk - apm. tulk.) ļauj tikt galÄ ar Å”o problÄmu.
Vai ir jÄreÄ£istrÄ gan Ingress, gan Egress?
ÄŖsÄ atbilde ir jÄ, lai pods A varÄtu sazinÄties ar pod B, tam ir jÄļauj izveidot izejoÅ”o savienojumu (Å”im nolÅ«kam ir jÄkonfigurÄ izejas politika), un podam B ir jÄspÄj pieÅemt ienÄkoÅ”o savienojumu ( Å”im, attiecÄ«gi, ir nepiecieÅ”ama ieejas politika). politika).
TomÄr praksÄ varat paļauties uz noklusÄjuma politiku, lai atļautu savienojumus vienÄ vai abos virzienos.
Ja daži pod-avots tiks atlasÄ«ti viens vai vairÄki izeja-politiÄ·i, tam uzliktos ierobežojumus noteiks viÅu disjunkcija. Å ajÄ gadÄ«jumÄ jums bÅ«s skaidri jÄatļauj savienojums ar pod -adresÄtam. Ja pods nav atlasÄ«ts nevienÄ politikÄ, tÄ izejoÅ”Ä (izejas) trafika ir atļauta pÄc noklusÄjuma.
TÄpat arÄ« pÄksts liktenis iradresÄts, ko atlasÄ«jis viens vai vairÄki iekļūŔana-politiÄ·i, noteiks viÅu nesaskaÅas. Å ajÄ gadÄ«jumÄ jums ir skaidri jÄļauj tai saÅemt trafiku no avota apkopa. Ja podziÅa nav atlasÄ«ta nevienÄ politikÄ, visa tÄ ieejas datplÅ«sma ir atļauta pÄc noklusÄjuma.
Skatiet zemÄk.
Baļķi
Kubernetes tÄ«kla politikas nevar reÄ£istrÄt trafiku. Tas apgrÅ«tina noteikt, vai politika darbojas, kÄ paredzÄts, un ievÄrojami sarežģī droŔības analÄ«zi.
Trafika kontrole uz ÄrÄjiem pakalpojumiem
Kubernetes tÄ«kla politikas neļauj norÄdÄ«t pilnÄ«bÄ kvalificÄtu domÄna nosaukumu (DNS) izejas sadaļÄs. Å is fakts rada ievÄrojamas neÄrtÄ«bas, mÄÄ£inot ierobežot trafiku uz ÄrÄjiem galamÄrÄ·iem, kuriem nav fiksÄtas IP adreses (piemÄram, aws.com).
Politikas pÄrbaude
UgunsmÅ«ri jÅ«s brÄ«dinÄs vai pat atteiksies pieÅemt nepareizu politiku. Kubernetes veic arÄ« dažas pÄrbaudes. Iestatot tÄ«kla politiku, izmantojot kubectl, Kubernetes var paziÅot, ka tÄ ir nepareiza, un atteikties to pieÅemt. Citos gadÄ«jumos Kubernetes paÅems politiku un aizpildÄ«s to ar trÅ«kstoÅ”o informÄciju. Tos var redzÄt, izmantojot komandu:
kubernetes get networkpolicy <policy-name> -o yaml
Å emiet vÄrÄ, ka Kubernetes validÄcijas sistÄma nav nekļūdÄ«ga un var palaist garÄm dažus kļūdu veidus.
IzpildīŔana
Kubernetes pati neievieÅ” tÄ«kla politikas, bet ir tikai API vÄrteja, kas deleÄ£Ä kontroles slogu pamatÄ esoÅ”ajai sistÄmai, ko sauc par konteineru tÄ«kla saskarni (CNI). Politiku iestatÄ«Å”ana Kubernetes klasterÄ«, nepieŔķirot atbilstoÅ”o CNI, ir tÄda pati kÄ politiku izveide ugunsmÅ«ra pÄrvaldÄ«bas serverÄ«, pÄc tam tÄs neinstalÄjot ugunsmÅ«ros. JÅ«su ziÅÄ ir nodroÅ”inÄt pienÄcÄ«gu CNI vai, Kubernetes platformu gadÄ«jumÄ, mitinÄt mÄkonÄ«. (jÅ«s varat redzÄt pakalpojumu sniedzÄju sarakstu Å”eit ā apm. trans.), iespÄjojiet tÄ«kla politikas, kas iestatÄ«s CNI jÅ«su vietÄ.
Å emiet vÄrÄ, ka Kubernetes nebrÄ«dinÄs, ja iestatÄ«siet tÄ«kla politiku bez atbilstoÅ”a palÄ«ga CNI.
Pavalstnieks vai bezvalstnieks?
Visi Kubernetes CNI, ar kuriem esmu saskÄrusies, ir statusa (piemÄram, Calico izmanto Linux conntrack). Tas ļauj podam saÅemt atbildes uz uzsÄkto TCP savienojumu, to neizveidojot no jauna. TaÄu man nav zinÄms Kubernetes standarts, kas garantÄtu valstiskumu.
Uzlabota droŔības politikas pÄrvaldÄ«ba
Å eit ir daži veidi, kÄ uzlabot droŔības politikas izpildi Kubernetes:
Service Mesh arhitektÅ«ras modelis izmanto blakusvÄÄ£u konteinerus, lai sniegtu detalizÄtu telemetriju un satiksmes kontroli servisa lÄ«menÄ«. KÄ piemÄru varam Åemt Istio.
Daži CNI pÄrdevÄji ir paplaÅ”inÄjuÅ”i savus rÄ«kus, lai pÄrsniegtu Kubernetes tÄ«kla politikas.
Tufins Orka NodroÅ”ina Kubernetes tÄ«kla politiku redzamÄ«bu un automatizÄciju.
Tufin Orca pakotne pÄrvalda Kubernetes tÄ«kla politikas (un ir iepriekÅ” minÄto ekrÄnuzÅÄmumu avots).
Kubernetes tÄ«kla politikas piedÄvÄ labu rÄ«ku komplektu klasteru segmentÄÅ”anai, taÄu tÄs nav intuitÄ«vas un tÄm ir daudz smalkumu. Å Ä«s sarežģītÄ«bas dÄļ es uzskatu, ka daudzas esoÅ”Äs klasteru politikas ir kļūdainas. IespÄjamie Ŕīs problÄmas risinÄjumi ietver politikas definÄ«ciju automatizÄciju vai citu segmentÄcijas rÄ«ku izmantoÅ”anu.
Ceru, ka Ŕī rokasgrÄmata palÄ«dzÄs noskaidrot dažus jautÄjumus un atrisinÄt iespÄjamÄs problÄmas.