Fêmkirina vebijarkên siyaseta torê bi Calico re

Fêmkirina vebijarkên siyaseta torê bi Calico re

Pêveka torê ya Calico ji bo parastina hosteyên hardware, makîneyên virtual û podan rêzek berfireh a polîtîkayên torê bi hevoksaziyek yekbûyî peyda dike. Van polîtîkayan dikarin di nav cîhek navan de bêne sepandin an jî polîtîkayên torê yên gerdûnî bin ku li ser têne sepandin xala dawî ya mêvandar (ji bo parastina serîlêdanên ku rasterast li ser mêvandar dixebitin - mêvandar dikare serverek an makîneyek virtual be) an xala dawiya kar (ji bo parastina serîlêdanên ku di konteyneran an makîneyên virtual yên mêvandar de dixebitin). Polîtîkayên Calico dihêle hûn bi karanîna vebijarkên wekî preDNAT, unracked, û applicationOnForward, li ser xalên cihêreng ên di rêça pakêtê de tedbîrên ewlehiyê bicîh bikin. Fêmkirina van vebijarkan çawa dixebitin dikare bibe alîkar ku ewlehî û performansa pergala weya giştî baştir bike. Vê gotarê cewhera van vebijarkên polîtîkaya Calico (preDNAT, bêserûber û AppOnForward) ku li ser xalên paşîn ên mêvandar têne sepandin, bi giranî li ser tiştên ku di rêyên hilberandina pakêtê de diqewime (zincîrên iptabels) rave dike.

Vê gotarê texmîn dike ku hûn têgihiştinek bingehîn heye ka polîtîkayên tora Kubernetes û Calico çawa dixebitin. Heke ne, em pêşniyar dikin ku wê biceribînin tutorial polîtîkaya torê ya bingehîn и tutorial parastina host berî xwendina vê gotarê Calico bikar bînin. Em jî ji we hêvî dikin ku hûn têgihîştina bingehîn a xebatê bikin iptables li linux.

Calico siyaseta tora gerdûnî destûrê dide te ku hûn ji hêla etîketan ve komek rêzikên gihîştinê bicîh bikin (ji komên mêvandar û barkêşên kar / podan re). Ev pir bikêr e ger hûn pergalên heterojen bi hev re bikar bînin - makîneyên virtual, pergalek rasterast li ser hardware, an binesaziyek kubernetes. Wekî din, hûn dikarin koma xwe (girêdan) bi karanîna komek polîtîkayên daxuyandî biparêzin û polîtîkayên torê li ser seyrûsefera hatinê bicîh bikin (mînakî, bi navgîniya NodePorts an karûbarê IP-yên Derveyî).

Di astek bingehîn de, dema ku Calico podek bi torê ve girêdide (li xêza jêrîn binêre), ew bi karanîna navgînek Ethernet a virtual (veth) bi mêvandarê ve girêdide. Trafîka ku ji hêla pod ve hatî şandin ji vê navbeynkariya virtual ji mêvandar re tê û bi heman rengî wekî ku ji navgînek torê ya laşî hatibe tête kirin. Ji hêla xwerû, Calico van navberan navên caliXXX bi nav dike. Ji ber ku seyrûsefer bi navgîniya virtual ve tê, ew di iptables re derbas dibe mîna ku pod yek hop dûr be. Ji ber vê yekê, gava ku seyrûsefer tê / ji podek tê, ew ji hêla mêvandar ve tê şandin.

Li ser girêkek Kubernetes ku Calico-yê dimeşîne, hûn dikarin pêvekek virtual (veth) li ser bargiraniyek wekî jêrîn nexşeyek bikin. Di mînaka jêrîn de, hûn dikarin bibînin ku veth#10 (calic1cbf1ca0f8) bi cnx-manager-* ve girêdayî ye li cîhê navên 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
...

Fêmkirina vebijarkên siyaseta torê bi Calico re

Ji ber ku Calico ji bo her bargiraniya kar têkiliyek veth diafirîne, ew çawa polîtîkayên bicîh tîne? Ji bo vê yekê, Calico bi karanîna iptables di zincîreyên cihêreng ên riya hilberandina pakêtê de çengan diafirîne.

Diagrama jêrîn zincîreyên ku di iptables (an jî bine-pergala netfilterê) de beşdarî hilberandina pakêtê dibin nîşan dide. Dema ku pakêtek bi navgîniya torê digihîje, ew pêşî di zincîra PREROUTING re derbas dibe. Dûv re biryarek rêwîtiyê tête girtin, û li ser vê yekê, pakêt an INPUT (ji pêvajoyên mêvandar re têne rêve kirin) an jî FORWARD (ji bo podek an girêkek din a li ser torê tê rêve kirin) derbas dibe. Ji pêvajoya herêmî, pakêt berî ku ji kabloyê were şandin di zincîra OUTPUT û paşê POSTROUTING re derbas dibe.

Bala xwe bidinê ku pod di heman demê de ji hêla hilberandina iptables ve jî saziyek derveyî ye (bi veth ve girêdayî ye). Werin em bi kurtî bibêjin:

  • Trafîka berevkirî (nat, rêvekirî an ber/ji podekê) di zincîrên PÊŞÎ - PÊŞ - PIŞTÎ de derbas dibe.
  • Trafîka pêvajoya mêvandariya herêmî di zincîra PREROUTING - INPUT re derbas dibe.
  • Trafîka ji pêvajoya mêvandarê herêmî di zincîra OUTPUT - POSTROUTING re derbas dibe.

Fêmkirina vebijarkên siyaseta torê bi Calico re

Calico vebijarkên polîtîkayê peyda dike ku dihêle hûn polîtîkayên li ser hemî zincîreyan bicîh bikin. Di hişê wê de, ka em li vebijarkên cihêreng veavakirina siyasetê yên ku di Calico de peyda dibin binêrin. Hejmarên di navnîşa vebijarkên jêrîn de bi hejmarên di diagrama jorîn re têkildar in.

  1. Siyaseta xala dawî ya bargiraniyê (pod).
  2. Siyaseta xala dawî ya mêvandar
  3. Vebijêrk ApplyOnForward
  4. Siyaseta PreDNAT
  5. Siyaseta Untracked

Ka em dest bi nihêrîna ka polîtîka li ser xalên dawiya kar (Kubernetes pods an OpenStack VM) çawa têne sepandin, û dûv re li vebijarkên polîtîkayê yên ji bo xalên dawiya mêvandar binihêrin.

Xalên Dawiyê yên Kar

Polîtîkaya Xala Dawî ya Karê Karê (1)

Ev vebijarkek e ku hûn pêlên kubernetes biparêzin. Calico piştgirî dide xebata bi Kubernetes NetworkPolicy re, lê ew di heman demê de polîtîkayên din jî peyda dike - Calico NetworkPolicy û GlobalNetworkPolicy. Calico ji bo her podê (bargiraniya kar) zincîreyekê diafirîne û di zincîreyên INPUT û DERKETÊ de ji bo bargiraniya kar zencîreyekê diafirîne tabloya parzûnê ya zincîra FORWARD.

Host Endpoints

Siyaseta xala dawî ya mêvandar (2)

Digel CNI (navbera torê ya konteynerê), polîtîkayên Calico jêhatîbûna parastina mêvandar xwe peyda dike. Di Calico de, hûn dikarin bi destnîşankirina têkeliyek navgîniya mêvandar û, ger hewce be, hejmarên portê, xalek dawiya mêvandar biafirînin. Pêkanîna polîtîkayê ji bo vê saziyê bi karanîna tabloyek parzûnê ya di zincîra INPUT û DERKETÊ de pêk tê. Wekî ku hûn ji diagramê jî dibînin, (2) ew li ser pêvajoyên herêmî yên li ser node / mêvandarê bicîh dikin. Ango, heke hûn polîtîkayek ku li ser xala dawiya mêvandar derbas dibe biafirînin, ew ê bandorê li seyrûsefera ku diçe/ji podên we neke. Lê ew ji bo astengkirina seyrûsefera ji bo mêvandar û podên we bi karanîna polîtîkayên Calico ve navbeynek / hevoksaziyek yekane peyda dike. Ev pêvajoya birêvebirina polîtîkayên ji bo torgilokek heterojen pir hêsan dike. Veavakirina polîtîkayên xala dawiya mêvandar ji bo zêdekirina ewlehiya komê dozek girîng a karanîna din e.

Siyaseta ApplyOnForward (3)

Vebijarka ApplyOnForward di polîtîkaya torê ya gerdûnî ya Calico de heye ku destûrê bide polîtîkayan ku li ser hemî seyrûsefera ku ji xala dawiya mêvandar re derbas dibin, tevî seyrûsefera ku dê ji hêla mêvandar ve were şandin, were sepandin. Ev di nav de seyrûsefera ku ji bo podê herêmî an cîhek din a li ser torê tê şandin. Calico hewce dike ku ev mîheng ji bo polîtîkayên ku PreDNAT bikar tînin û nehatine şopandin were çalak kirin, li beşên jêrîn binêrin. Wekî din, ApplyOnForward dikare ji bo şopandina seyrûsefera mêvandar di rewşên ku routerek virtual an nermalava NAT-ê tê bikar anîn de were bikar anîn.

Hişyar bikin ku heke hûn hewce ne ku hûn heman polîtîkaya torê hem li ser pêvajoyên mêvandar û hem jî li ser podan bicîh bikin, wê hingê hûn ne hewce ne ku vebijarka ApplyOnForward bikar bînin. Tişta ku hûn hewce ne bikin ev e ku ji bo xala mêvandar û barkirina xebatê (pod) etîketek biafirînin. Calico têra xwe jîr e ku sîyaseta li ser bingeha etîketan bicîh bîne, bêyî ku celeb xala dawîn (hostendpoint an bargiraniya kar).

Polîtîkaya PreDNAT (4)

Di Kubernetes de, portên sazûmana karûbarê bi karanîna vebijarka NodePorts an jî, vebijarkî (dema Calico bikar tînin), bi reklamkirina wan bi karanîna vebijarkên Cluster IP-yên an IP-yên Derve dikarin ji derve werin eşkere kirin. Kube-proxy seyrûsefera ku bi karûbarek ve girêdayî ye ku bi karûbarê têkildar bi DNAT-ê ve girêdayî ye hevseng dike. Ji ber vê yekê, hûn çawa polîtîkayên ji bo seyrûsefera ku bi NodePorts ve tê bicîh dikin? Ji bo ku van polîtîkayan berî ku seyrûsefer ji hêla DNAT-ê ve were hilanîn (ku nexşeyek di navbera mêvandar:port û karûbarê têkildar de ye) têne sepandin, Calico ji bo GlobalNetworkPolicy parametreyek bi navê "preDNAT: rast" peyda dike.

Dema ku pêş-DNAT were çalak kirin, van polîtîkayan di (4) de di diagramê de - di tabloya mangle ya zincîra PREROUTING de - yekser berî DNAT-ê têne bicîh kirin. Rêza asayî ya polîtîkayan li vir nayê şopandin, ji ber ku sepana van polîtîkayan di rêça pêvajoya trafîkê de pir zûtir pêk tê. Lêbelê, polîtîkayên preDNAT rêza serîlêdanê di nav xwe de rêz dikin.

Dema ku polîtîkayên bi pêş-DNAT-ê re diafirînin, girîng e ku hûn di derbarê seyrûsefera ku hûn dixwazin pêvajo bikin de baldar bin û bihêlin ku pirranî were red kirin. Trafîka ku di polîtîkaya berî-DNAT-ê de wekî 'destûr' hatiye nîşankirin dê êdî ji hêla polîtîkaya xala mêvandar ve neyê kontrol kirin, dema ku seyrûsefera ku polîtîkaya berî-DNAT-ê têk diçe dê di nav zincîrên mayî de bidome.
Calico dema ku preDNAT bikar tîne çalakkirina vebijarka ApplyOnForward mecbûrî kiriye, ji ber ku ji hêla pênase ve mebesta seyrûseferê hîn nehatiye hilbijartin. Trafîk dikare berbi pêvajoya mêvandar ve were rêve kirin, an jî dikare ji bo podek an nodek din were şandin.

Siyaseta Neşopandin (5)

Tora û serîlêdan dikarin di tevgerê de cûdahiyên mezin hebin. Di hin rewşên giran de, serîlêdan dibe ku gelek girêdanên kurt-kurt biafirînin. Ev dikare bibe sedem ku conntrack (pêkhateyek bingehîn a stûna torê ya Linux) ji bîranînê derkeve. Bi kevneşopî, ji bo ku hûn van celeb sepanan li ser Linux-ê bimeşînin, hûn neçar in ku bi desta vesazkirinê an neçalak bikin, an qaîdeyên iptables binivîsin da ku kontrakê derbas bikin. Siyaseta neşopandinî li Calico vebijarkek hêsan û bikêrtir e ger hûn dixwazin pêwendiyan bi lez û bez pêvajoyê bikin. Mînakî, heke hûn girseyî bikar bînin memcache an jî wekî tedbîrek zêde ya parastinê li dijî DDOS.

Vê bixwînin blog post (an jî wergera me) ji bo bêtir agahdarî, tevî ceribandinên performansê yên ku polîtîkaya neşopandin bikar tînin.

Dema ku hûn vebijarka "doNotTrack: rast" li Calico globalNetworkPolicy destnîşan dikin, ew dibe polîtîkayek **neşopandin** û pir zû di lûleya hilberandina pakêtê ya Linux de tê sepandin. Li şemaya li jor mêze dikin, berî ku şopandina girêdanê (conntrack) were destpêkirin, polîtîkayên neşopandinî di zincîrên PREROUTING û OUTPUT de di tabloya xav de têne sepandin. Dema ku pakêtek ji hêla polîtîkaya ku nehatiye şopandin ve hatî destûr kirin, ew tête nîşankirin ku şopandina pêwendiyê ji bo wê pakêtê neçalak bike. Ev tê vê wateyê:

  • Siyaseta bê şopandin li ser bingeha pakêtê tê sepandin. Têgîna girêdanê (an herikînê) tune ye. Nebûna girêdanê çend encamên girîng hene:
  • Heke hûn dixwazin hem seyrûsefera daxwaz û bersivê bihêlin, hûn hem ji bo hundur û hem jî ji bo derketinê qaîdeyek hewce ne (ji ber ku Calico bi gelemperî conntrack bikar tîne da ku seyrûsefera bersivê wekî destûr nîşan bide).
  • Siyaseta neşopandin ji bo barkêşên Kubernetes (pods) naxebite, ji ber ku di vê rewşê de rêyek tune ku meriv pêwendiya derketinê ji podê bişopîne.
  • NAT bi pakêtên nehatine şopandin re rast naxebite (ji ber ku kernel nexşeya NAT-ê di conntrack de hilîne).
  • Dema ku di polîtîkaya bê şopandin de qaîdeya "destûrê bide hemîyan" derbas dibe, dê hemî pakêt wekî neşopandin bêne nîşankirin. Ev hema hema her gav ne ya ku hûn dixwazin e, ji ber vê yekê girîng e ku hûn di derheqê pakêtên ku ji hêla polîtîkayên neşopandiye ve têne destûr kirin de pir bijartî bin (û rê bidin ku piraniya seyrûseferê di nav polîtîkayên şopandina normal de derbas bibin).
  • Polîtîkayên bê şopandin di destpêka lûleya hilberandina pakêtê de têne sepandin. Dema ku polîtîkayên Calico diafirînin ev pir girîng e ku meriv fêm bike. Hûn dikarin sîyasetek pod bi ferman:1 û siyasetek neşopandin bi ferman:1000 hebe. Ew ê ne girîng e. Siyaseta Untracked dê berî polîtîkaya ji bo podê were sepandin. Polîtîkayên bê şopandin tenê di nav xwe de rêzê li fermana îdamê digirin.

Ji ber ku yek ji mebestên polîtîkaya doNotTrack ev e ku siyasetê pir zû di lûleya hilberandina pakêtê ya Linux de bicîh bike, Calico dema ku doNotTrack bikar tîne destnîşankirina vebijarka applyOnForward mecbûrî dike. Li ser diyagrama hilberandina pakêtê, bala xwe bidin ku sîyaseta neşopandin (5) berî her biryarên rêvekirinê tê sepandin. Trafîk dikare berbi pêvajoya mêvandar ve were rêve kirin, an jî dikare ji bo podek an nodek din were şandin.

Encam

Me li vebijarkên siyasetê yên cihêreng (Host endpoint, ApplyOnForward, preDNAT, and Untracked) li Calico nihêrî û ka ew çawa li ser riya hilberandina pakêtê têne sepandin. Fêmkirina ka ew çawa dixebitin di pêşxistina polîtîkayên bandorker û ewledar de dibe alîkar. Bi Calico re hûn dikarin polîtîkayek torê ya gerdûnî ya ku li ser etîketek (komek girêk û podan) derbas dibe bikar bînin û polîtîkayên bi pîvanên cihêreng bicîh bînin. Ev dihêle ku pisporên sêwirana ewlehî û torê bi hêsanî "her tişt" (cûreyên xala paşîn) bi yekcarî bi karanîna yek zimanek siyasetê bi polîtîkayên Calico re biparêzin.

Pejirandin: Ez dixwazim spasiya xwe bikim Sean Crampton и Alexa Pollitta ji bo nirxandina wan û agahdariya hêja.

Source: www.habr.com

Add a comment