Að skilja valkosti netstefnu með Calico

Að skilja valkosti netstefnu með Calico

Calico netviðbótin býður upp á breitt úrval netstefnu með samræmdri setningafræði til að vernda vélbúnaðargestgjafa, sýndarvélar og fræbelg. Hægt er að beita þessum reglum innan nafnarýmis eða vera alþjóðlegar netstefnur sem eiga við um endapunktur hýsils (til að vernda forrit sem keyra beint á hýsilinn - gestgjafinn getur verið þjónn eða sýndarvél) eða endapunktur vinnuálags (til að vernda forrit sem keyra í gámum eða hýstum sýndarvélum). Calico stefnur gera þér kleift að beita öryggisráðstöfunum á ýmsum stöðum í pakkaleiðinni með því að nota valkosti eins og preDNAT, unraracked og applicationOnForward. Að skilja hvernig þessir valkostir virka getur hjálpað til við að bæta öryggi og afköst heildarkerfisins þíns. Þessi grein útskýrir kjarna þessara Calico-stefnuvalkosta (preDNAT, unraracked og applicationOnForward) sem er beitt á hýsingarendapunkta, með áherslu á það sem gerist í pakkavinnsluleiðum (iptabels keðjur).

Þessi grein gerir ráð fyrir að þú hafir grunnskilning á því hvernig netkerfi Kubernetes og Calico virka. Ef ekki, mælum við með að prófa það grunnkennsla um netstefnu и námskeið um hýsingarvernd nota Calico áður en þú lest þessa grein. Við gerum ráð fyrir að þú hafir grunnskilning á starfinu iptables í linux.

Calico alþjóðleg netstefna gerir þér kleift að beita settu aðgangsreglum eftir merkimiðum (á hópa gestgjafa og vinnuálag/belg). Þetta er mjög gagnlegt ef þú notar ólík kerfi saman - sýndarvélar, kerfi beint á vélbúnaði eða kubernetes innviði. Að auki geturðu verndað þyrpinguna þína (hnúta) með því að nota sett af yfirlýsandi reglum og beitt netstefnu á komandi umferð (til dæmis í gegnum NodePorts eða Ytri IP þjónustu).

Á grundvallarstigi, þegar Calico tengir fræbelg við netið (sjá skýringarmynd hér að neðan), tengir það hann við gestgjafann með sýndar Ethernet tengi (veth). Umferðin sem belgurinn sendir kemur til gestgjafans frá þessu sýndarviðmóti og er unnin á sama hátt og hún kæmi frá líkamlegu netviðmóti. Sjálfgefið er að Calico nefnir þessi viðmót caliXXX. Þar sem umferðin kemur í gegnum sýndarviðmótið fer hún í gegnum iptables eins og belgurinn væri einu hoppi í burtu. Þess vegna, þegar umferð kemur til/frá belg, er hún áframsend frá sjónarhóli gestgjafans.

Á Kubernetes hnút sem keyrir Calico geturðu kortlagt sýndarviðmót (veth) við vinnuálag sem hér segir. Í dæminu hér að neðan geturðu séð að veth#10 (calic1cbf1ca0f8) er tengt við cnx-manager-* í nafnrýminu fyrir calico-eftirlit.

[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
...

Að skilja valkosti netstefnu með Calico

Í ljósi þess að Calico býr til veth viðmót fyrir hvert vinnuálag, hvernig framfylgir það stefnum? Til að gera þetta býr Calico til króka í ýmsum keðjum pakkavinnsluleiðarinnar með iptables.

Skýringarmyndin hér að neðan sýnir keðjurnar sem taka þátt í pakkavinnslu í iptables (eða netfilter undirkerfinu). Þegar pakki kemur í gegnum netviðmót fer hann fyrst í gegnum PREROUTING keðjuna. Ákvörðun um leið er síðan tekin og út frá þessu fer pakkinn í gegnum annað hvort INPUT (beint að hýsingarferlum) eða FORWARD (beint í pod eða annan hnút á netinu). Frá staðbundnu ferli fer pakkinn í gegnum OUTPUT og síðan POSTROUTING keðjuna áður en hann er sendur niður kapalinn.

Athugaðu að belgurinn er líka utanaðkomandi aðili (tengdur veth) hvað varðar iptables vinnslu. Við skulum draga saman:

  • Áframsend umferð (náttúruleg, beint eða til/frá belg) fer í gegnum PREROUTING - ÁFRAM - POSTROUTING keðjurnar.
  • Umferð til staðbundins hýsingarferlis fer í gegnum PREROUTING - INPUT keðjuna.
  • Umferð frá staðbundnu hýsingarferli fer í gegnum OUTPUT - POSTROUTING keðjuna.

Að skilja valkosti netstefnu með Calico

Calico býður upp á stefnumöguleika sem gera þér kleift að beita stefnu í öllum keðjum. Með það í huga skulum við skoða mismunandi stefnustillingarvalkosti sem eru í boði í Calico. Tölurnar á listanum yfir valkosti hér að neðan samsvara tölunum á skýringarmyndinni hér að ofan.

  1. Stefna vinnuálagsendapunkts (pod).
  2. Stefna hýsingarenda
  3. ApplyOnForward valkostur
  4. PreDNAT stefna
  5. Ófylgjandi stefna

Byrjum á því að skoða hvernig reglum er beitt á endapunkta vinnuálags (Kubernetes pods eða OpenStack VMs), og skoðum síðan stefnumöguleikana fyrir hýsilendapunkta.

Endapunktar vinnuálags

Vinnuálagsendapunktastefna (1)

Þetta er valkostur til að vernda kubernetes fræbelgina þína. Calico styður að vinna með Kubernetes NetworkPolicy, en það veitir einnig viðbótarreglur - Calico NetworkPolicy og GlobalNetworkPolicy. Calico býr til keðju fyrir hvern belg (vinnuálag) og krækir í INPUT og OUTPUT keðjurnar fyrir vinnuálagið við síutöflu FRAMVERÐAR keðjunnar.

Endapunktar gestgjafa

Stefna gestgjafaendapunkta (2)

Til viðbótar við CNI (gámakerfisviðmót), veita Calico stefnur möguleika á að vernda hýsilinn sjálfan. Í Calico geturðu búið til hýsilendapunkt með því að tilgreina blöndu af hýsilviðmótinu og, ef nauðsyn krefur, gáttarnúmer. Framfylgni stefnu fyrir þessa aðila er náð með því að nota síutöflu í INPUT og OUTPUT keðjunum. Eins og þú sérð á skýringarmyndinni, (2) eiga þau við staðbundna ferla á hnút/hýsil. Það er að segja, ef þú býrð til stefnu sem á við um endapunkt hýsingar, mun það ekki hafa áhrif á umferð sem fer til/frá belgunum þínum. En það býður upp á eitt viðmót / setningafræði til að loka fyrir umferð fyrir gestgjafann þinn og fræbelg með því að nota Calico stefnur. Þetta einfaldar mjög ferlið við að stjórna stefnu fyrir ólíkt net. Að stilla endapunktastefnu gestgjafa til að auka klasaöryggi er annað mikilvægt notkunartilvik.

ApplyOnForward stefna (3)

ApplyOnForward valmöguleikinn er fáanlegur í Calico alþjóðlegri netstefnu til að leyfa reglum að beita á alla umferð sem fer í gegnum endapunkt hýsilsins, þar með talið umferð sem verður áframsend af gestgjafanum. Þetta felur í sér umferð sem er send til staðbundinnar hólfs eða annars staðar á netinu. Calico krefst þess að þessi stilling sé virkjuð fyrir stefnur sem nota PreDNAT og órakaðar, sjá eftirfarandi kafla. Að auki er hægt að nota ApplyOnForward til að fylgjast með gestgjafaumferð í þeim tilvikum þar sem sýndarbeini eða NAT hugbúnaður er notaður.

Athugaðu að ef þú þarft að nota sömu netstefnu fyrir bæði hýsingarferla og fræbelg, þá þarftu ekki að nota ApplyOnForward valkostinn. Allt sem þú þarft að gera er að búa til merki fyrir nauðsynlegan hýsingarpunkt og endapunkt vinnuálags (belg). Calico er nógu klárt til að framfylgja stefnu sem byggist á merkimiðum, óháð tegund endapunkts (hýsingarpunkti eða vinnuálagi).

PreDNAT stefna (4)

Í Kubernetes er hægt að afhjúpa þjónustueiningahöfn utanaðkomandi með því að nota NodePorts valkostinn eða, valfrjálst (þegar þú notar Calico), með því að auglýsa þær með því að nota Cluster IPs eða External IPs valkostina. Kube-proxy jafnar komandi umferð sem er bundin við þjónustu við belg samsvarandi þjónustu með því að nota DNAT. Í ljósi þessa, hvernig framfylgir þú stefnu fyrir umferð sem kemur í gegnum NodePorts? Til að tryggja að þessum reglum sé beitt áður en umferðin er unnin af DNAT (sem er kortlagning á milli host:port og samsvarandi þjónustu), gefur Calico færibreytu fyrir globalNetworkPolicy sem kallast "preDNAT: true".

Þegar for-DNAT er virkt, eru þessar reglur útfærðar í (4) á skýringarmyndinni - í mangle-töflu PREROUTING keðjunnar - rétt fyrir DNAT. Venjulegri röð reglna er ekki fylgt hér, þar sem beiting þessara reglna á sér stað mun fyrr á umferðarvinnsluleiðinni. Hins vegar virða preDNAT stefnur innbyrðis umsóknarröð.

Þegar búið er til stefnur með pre-DNAT er mikilvægt að fara varlega í þá umferð sem þú vilt vinna úr og leyfa meirihlutanum að vera hafnað. Umferð merkt sem 'leyfa' í for-DNAT stefnunni verður ekki lengur athugað af hýsingarpunktastefnunni, á meðan umferð sem stenst ekki for-DNAT stefnuna heldur áfram í gegnum þær keðjur sem eftir eru.
Calico hefur gert það skylt að virkja valmöguleikann applicationOnForward þegar preDNAT er notað, þar sem ákvörðunarstaður umferðarinnar hefur samkvæmt skilgreiningu ekki enn verið valinn. Umferð er hægt að beina á hýsingarferlið, eða það er hægt að senda hana áfram í belg eða annan hnút.

Órakuð stefna (5)

Netkerfi og forrit geta haft mikinn mun á hegðun. Í sumum öfgafullum tilfellum geta forrit myndað margar skammtímatengingar. Þetta getur valdið því að conntrack (kjarna hluti af Linux netstaflanum) verður uppiskroppa með minni. Hefð er fyrir því að til að keyra þessar gerðir af forritum á Linux þyrftirðu að stilla eða slökkva á conntrack handvirkt, eða skrifa iptables reglur til að komast framhjá conntrack. Órakuð stefna í Calico er einfaldari og skilvirkari valkostur ef þú vilt vinna úr tengingum eins fljótt og auðið er. Til dæmis ef þú notar massive memcache eða sem viðbótarráðstöfun til varnar gegn DDOS.

Lestu þetta blogg (Eða þýðing okkar) til að fá frekari upplýsingar, þar á meðal árangurspróf sem nota órakta stefnu.

Þegar þú stillir „doNotTrack: true“ valmöguleikann í Calico globalNetworkPolicy, verður það **ósporð** stefna og er beitt mjög snemma í Linux pakkavinnslupípunni. Þegar litið er á skýringarmyndina hér að ofan, þá er óraktar stefnur beittar í PREROUTING og OUTPUT keðjunum í hráu töflunni áður en tengingarrakningu (conntrack) er hafin. Þegar pakki er leyfður af óraktu stefnunni er hann merktur til að slökkva á tengingarrakningu fyrir þann pakka. Það þýðir:

  • Óraktu stefnunni er beitt á pakkagrundvelli. Það er ekkert hugtak um tengingu (eða flæði). Skortur á tengingum hefur nokkrar mikilvægar afleiðingar:
  • Ef þú vilt leyfa bæði beiðni og svarumferð, þarftu reglu fyrir bæði á heimleið og útleið (þar sem Calico notar venjulega conntrack til að merkja viðbragðsumferð sem leyfða).
  • Órakta stefnan virkar ekki fyrir Kubernetes vinnuálag (belg), vegna þess að í þessu tilfelli er engin leið til að rekja útleiðandi tengingu frá hólfinu.
  • NAT virkar ekki rétt með órakuðum pökkum (þar sem kjarninn geymir NAT kortlagninguna í conntrack).
  • Þegar farið er í gegnum „leyfa allt“ regluna í órakningarstefnunni verða allir pakkar merktir sem órakaðir. Þetta er næstum alltaf ekki það sem þú vilt, svo það er mikilvægt að vera mjög sértækur varðandi pakkana sem óraktar reglur leyfa (og leyfa flestri umferð að fara í gegnum venjulegar raktar reglur).
  • Óraktar reglur eru notaðar strax í upphafi pakkavinnsluleiðslunnar. Þetta er mjög mikilvægt að skilja þegar þú býrð til Calico stefnur. Þú getur haft pod stefnu með order:1 og órakta stefnu með order:1000. Það mun ekki skipta máli. Untracked stefnan verður notuð á undan stefnunni fyrir hólfið. Óraktar reglur virða framkvæmdarfyrirmæli aðeins sín á milli.

Vegna þess að einn af tilgangi doNotTrack stefnunnar er að framfylgja stefnunni mjög snemma í Linux pakkavinnsluleiðslunni, gerir Calico það skylt að tilgreina applicationOnForward valmöguleikann þegar doNotTrack er notað. Með því að vísa til skýringarmyndar um pakkavinnslu, athugaðu að órakta(5) stefnan er notuð fyrir allar ákvarðanir um leið. Umferð er hægt að beina á hýsingarferlið, eða það er hægt að senda hana áfram í belg eða annan hnút.

Niðurstöður

Við skoðuðum hina ýmsu stefnumöguleika (Host endpoint, ApplyOnForward, preDNAT og Untracked) í Calico og hvernig þeim er beitt meðfram pakkavinnsluleiðinni. Að skilja hvernig þau virka hjálpar til við að þróa skilvirka og örugga stefnu. Með Calico geturðu notað alþjóðlega netstefnu sem á við um merki (hóp af hnútum og belgjum) og beitt stefnum með ýmsum breytum. Þetta gerir sérfræðingum í öryggis- og nethönnun kleift að vernda „allt“ (endapunktagerðir) á þægilegan hátt í einu með því að nota eitt stefnumál með Calico stefnum.

Viðurkenning: Ég vil þakka Sean Crampton и Alexa Pollitta fyrir yfirferð þeirra og dýrmætar upplýsingar.

Heimild: www.habr.com

Bæta við athugasemd